Как получить полное отношение в Laravel / Eloquent - PullRequest
0 голосов
/ 06 марта 2020

на данный момент я пытаюсь выучить Laravel и Laravel Eloquent. Я пытаюсь решить проблему, используя отношения в Laravel.

У меня есть следующая структура базы данных в моем простом Laravel проекте.

table players:
id   name
table clubs:
id   name   icon
table players_x_clubs:
player_id   club_id

это один ко многим отношениям.

Можно ли получить полный клубный объект, который объединен с player_id?!

Первая попытка была добавить это в мою модель игрока

public function club()
{
    return $this->hasOne('App\PlayersXClub');
}

Здесь я получаю Отношения PlayersXClub только с player_id и club_id

, но я хочу получить полный объект клуба со стола клуба, возможно ли это простым способом?

Любые идеи, как я должен понять, правильно ли это?

Мое решение было так:

public function getClubRelation()
{
    $clubRelation = $this->hasOne('App\PlayersXClub')->get()->first();
    $club = Club::whereId($clubRelation->club_id)->get()->first();
    return $club;
}

С этим решением я могу сделать это в своем коде $player->getClubRelation()->icon

но я не знаю, правильно ли это решено или есть более простой способ решить его с помощью Eloquent?

1 Ответ

0 голосов
/ 06 марта 2020

У вас всегда есть доступ к объектам отношений. Например:

$player = Player::find(1);
$club   = $player->club;

или лучше

$player = Player::with('club')->find(1);

Однако я считаю, что вам не нужна дополнительная таблица. Дополнительная таблица привела бы к соотношению многие ко многим, что здесь не имеет большого смысла.

Игрок принадлежит одному клубу, и в клубе может быть много игроков. Так что это один ко многим.

Вы должны добавить club_id внешний ключ к столу игроков.

$table->unsignedBigInteger('club_id');
$table->foreign('club_id')->references('id')->on('clubs')->onDelete('cascade');

Класс игрока

public function club() {
   return $this->belongsTo(Club::class);
}

Клуб Класс

public function players() {
   return $this->hasMany(Player::class);
}
...