Laravel嵌套:事件(带有时间轴)和子事件(带有时间轴)

维夫库

我有可以包含子事件的事件,并且每个事件可以包含时间轴项目。
寻找一种获取嵌套集合的方法。

对于事件,我可以将它们与时间轴项一起使用:

App\Event::with('timelines')->get()

对于事件,我可以使用嵌套子事件:

App\Event::doesntHave('parent')->with('subEvents')->get()

如何将两者结合?

预期的最终结果:
每个事件包括
1)该事件的时间轴项目,以及
2)该事件的子事件(以及每个子事件:该子事件的时间轴项目)。

例如:

- Event 1
  - Timeline: 1, 3, 5
  - subEvents:
    - 2, Timeline: 2, 6
    - 3, Timeline: 7, 8
- Event 4
  - Timeline: 9
- Event 5
  - subEvents:
    - 6, Timeline: 10

也可以获取结果并使用集合分组。la App\Event::with('timelines')->get()->groupBy('parent_id'),但是难以到达所需的结构。

硬脂酸

如果要制作这种结构。

- Event 1
  - Timeline: 1, 3, 5
  - subEvents:
    - 2, Timeline: 2, 6
    - 3, Timeline: 7, 8
- Event 4
  - Timeline: 9
- Event 5
  - subEvents:
    - 6, Timeline: 10

您可以从Event模型中检索时间表以及subEvents时间表的时间表。为了使您可以创建一个subEvents检索功能

App\Event::with(['timelines','subEvents' => function($q){
   $q->with('timelines');
])->get();

或者这个,如果你不需要做任何疑问在子事件。

App\Event::with('timelines','subEvents.timelines')->get();

确保您的模型的关系必须像这样:

//Event.php
class Event extends Model
{
    public function timelines(){
        return $this->hasMany('App\Timeline');
    }

    public function subEvents(){
        return $this->hasMany('App\SubEvent');
    }
}

//SubEvent.php
class SubEvent extends Model
{
    public function timelines(){
        return $this->hasMany('App\Timeline');
    }
}

我认为,这可能会对您有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章