如何渴望加载多态关系的不同嵌套关系?

时间:2019-12-19 15:36:48

标签: laravel eloquent polymorphism relationship

我正在尝试获取用户及其事件的所有评论。 我在Review中有一个多态关系:它可以链接到Estimate或EventDate。 EventDate直接与Event关联,但Estimate通过AskEstimate与其关联。

我想这样做:

User::with([
   'reviews.reviewable.event',
   'reviews.reviewable.ask_estimate.event'
])->get();

但是,它当然会抛出一个例外:当EventDate可审阅时,它没有任何AskEstimate关系;当它是Estimated时,它没有任何事件关系。

那么,根据可审查的价值,我怎样才能得到给我一个或另一个的东西?

谢谢!

2 个答案:

答案 0 :(得分:0)

文档中的Nested Lazy Eager Loading & morphTo部分似乎几乎完全描述了您要查找的内容。它确实做到了“懒惰”的渴望加载而不是渴望的加载,但是我想这已经足够了。

根据我对文档的了解,您应该可以使用loadMorph这样的方法:

User::with('reviews')->get()
   ->loadMorph('reviews', [
       Estimate::class => ['event'],
       EventDate::class => ['ask_estimate.event'],
    ]);

答案 1 :(得分:0)

感谢Delena的回答。

根据文档,我认为必须那样使用loadMorph:

User::with('reviews.reviewable')
            ->limit(1)
            ->get()
            ->loadMorph('reviews.reviewable', [
                Estimate::class => ['ask_estimate.event'],
                EventDate::class => ['event'],
            ]);

但是通过这个,我只得到reviews.reviewable的结果,我没有得到任何事件或ask_estimate,例如loadMorph是否没用。