如何从 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 具有包含值 RIGHTname 列。我想抓住它以显示在前端的那个值。这是我在数据库中的表。

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 中计算价值? [复制]

如何加入 3 表 eloquent laravel 8

在 PHPUnit 中调用路由时如何在 Laravel 8 中模拟 Eloquent 模型

如何在 Laravel 5.8 中使用 Eloquent 进行查询?

Laravel 8.x - 使用 Eloquent 关系存储数据