如何在 Laravel/Eloquent 中获得完整的关系

How to get the full Relation in Laravel/Eloquent

目前我正在尝试学习 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');
}

在这里,我只得到 player_id 和 club_id

的 PlayersXClub 关系

但是我想从俱乐部table获得完整的俱乐部对象,是否可以通过简单的方式获得?

我有什么想法是正确的吗?

我的解决方案是这样的:

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

有了这个解决方案,我可以在我的代码中做到这一点 $player->getClubRelation()->icon

但我不知道它是否已正确解决,或者是否有更简单的方法来解决 Eloquent?

您始终可以访问对象关系。例如:

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

或更好

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

不过,我相信您不需要额外的 table。额外的 table 会导致多对多的关系,这在这里没有多大意义。

一个球员属于一个俱乐部,一个俱乐部可以有很多球员。所以是一对多。

你应该给玩家添加一个club_id外键table。

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

玩家Class

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

俱乐部Class

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