如何从 Laravel 8 Eloquent 中的嵌套关​​系中获取数据?

How to get data from nested relationship in Laravel 8 Eloquent?

如何与eloquent建立深厚的感情?我正在尝试像这样显示数据:

+------------------------------------+
| Main ID | Name  | SN  | Last Event |
|------------------------------------|
| 12      | James | j89 | RIGHT      |
+------------------------------------+

“最后一个事件”列基于“曲目”table 的最新数据,但值“正确”是“曲目”table 与“事件”table。因此,在这个 table 中,曲目 table 中的最新记录是 id 为 9,event_id 为 12,事件 table 中的 event_id 为 12有 name 列包含值 RIGHT。我想抓住它在前端显示的那个值。这是我在数据库中的 table。

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|
+----------+

如果我使用 has one relationship with latestOfMany() 方法,它没有到达事件 table。如何根据main_id通过Trackstable的最新数据到达Eventstable去抓取Eventstable中的值?谢谢!

你可以使用 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);