如何从 Laravel 8 Eloquent 中的嵌套关系中获取数据?
Posted
技术标签:
【中文标题】如何从 Laravel 8 Eloquent 中的嵌套关系中获取数据?【英文标题】:How to get data from nested relationship in Laravel 8 Eloquent? 【发布时间】:2021-12-30 11:57:55 【问题描述】:如何与eloquent建立深厚的关系?我正在尝试像这样显示数据:
+------------------------------------+
| Main ID | Name | SN | Last Event |
|------------------------------------|
| 12 | James | j89 | RIGHT |
+------------------------------------+
“Last Event”列基于“Tracks”表中的最新数据,但“RIGHT”值是“Tracks”表与“Events”表之间的关系。因此,在此表中,tracks 表中的最新记录是 id 为 9 且 event_id
为 12,Events 表中为 12 的 event_id
具有包含值 RIGHT
的 name
列。我想抓住它以显示在前端的那个值。这是我在数据库中的表。
Main table
+---------------+
|id | name | sn |
|---------------|
|12 | James| j89|
+---------------+
Tracks table
+-------------------------------------+
|id | main_id | event_id | created_at |
|-------------------------------------|
| 5 | 10 | 10 | 2021-10-12 |
| 9 | 10 | 12 | 2021-11-20 |
+-------------------------------------+
Events
+----------+
|id | name |
|----------|
|10 | LEFT |
|12 | RIGHT|
+----------+
如果我使用与latestOfMany()
方法有一种关系,它不会到达事件表。如何通过基于 main_id 的 Tracks 表的最新数据到达 Events 表以获取 Events 表中的值?谢谢!
【问题讨论】:
【参考方案1】:如果您正确设置了关系,您可以使用Eager Loading 来深入加载您的关系:
class Main extends Model
public function latestTrack()
return $this->hasOne(Track::class,'main_id')->latestOfMany();
class Track extends Model
public function event()
return $this->belongsTo(Event::class,'event_id');
现在你可以得到你需要的结构了:
$main=Main::with('latestTrack.event:id,name')->find(12);
【讨论】:
以上是关于如何从 Laravel 8 Eloquent 中的嵌套关系中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
检查从 Laravel 8 中 eloquent 返回的特定值
如何在 laravel 8 eloquent 中计算价值? [复制]
在 PHPUnit 中调用路由时如何在 Laravel 8 中模拟 Eloquent 模型