gpt4 book ai didi

php - Laravel Eloquent 相当于 QueryBuilder 查询

转载 作者:行者123 更新时间:2023-12-04 13:35:26 24 4
gpt4 key购买 nike

我有一个 Laravel 7 项目和这个数据库结构:

 races      participants      bibs      coords
------- -------------- ------ --------
id id id id
race_id bib_id
bib_id [...]

关系是:
1 race        =>  N participants  ( races.id = participants.race_id )
1 participant => 1 bib ( participants.bib_id = bibs.id )
1 bib => N coords ( bibs.id = coords.bib_id )

所以这也意味着: participants.bib_id = coords.bib_id
我想获得与特定种族相关的所有坐标。
我的做法是使用这样的查询构建器:
class Race extends Model
{
public function getCoords()
{
return Coord::join('participants', 'participants.bib_id', '=', 'coords.bib_id')
->where('participants.race_id', $this->id)->select('coords.*')->get();
}
}

在这里我可以这样做:
$coords = Race::find(1)->getCoords();

它按预期工作,但我正在寻找一种使用 Eloquent 的方法,以便更容易链接更多关系和内容。
我用 belongsToMany 尝试了很多东西和 hasManyThrough但没有任何效果。我想知道这是否可能?

最佳答案

// Race
public function participants()
{
return $this->hasMany(Participant::class);
}

// Participant
public function bib()
{
return $this->belongsTo(Bib::class);
}
public function race()
{
return $this->belongsTo(Race::class);
}

// Bib
public function coords()
{
return $this->hasMany(Coord::class);
}

// Coord
public function bib()
{
return $this->belongsTo(Bib::class);
}

现在,您想要的是找到给定种族的坐标。
$race = Race::find($id)->with('participants.bib.coords');
现在,从中提取坐标。
$coords = $race->participants->map(function($participant){
return $participant->bib->coords;
});

让我在下面的评论中发布。干杯!

关于php - Laravel Eloquent 相当于 QueryBuilder 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62409427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com