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