【问题标题】:How to get data from nested relationship in Laravel 8 Eloquent?如何从 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 表中的值?谢谢!

【问题讨论】:

    标签: laravel eloquent relationship


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-04
      • 2022-01-03
      • 2019-06-17
      • 1970-01-01
      • 2021-12-10
      • 2023-03-10
      • 1970-01-01
      • 2019-01-30
      相关资源
      最近更新 更多