如何渴望加载多态关系的不同嵌套关系?
Posted
技术标签:
【中文标题】如何渴望加载多态关系的不同嵌套关系?【英文标题】:How to eager load different nested relationships of polymorphic relationships? 【发布时间】:2020-04-12 05:36:04 【问题描述】:我正在尝试获取用户的所有评论及其事件。 我在 Review 中有一个多态关系:它可以链接到 Estimate 或 EventDate。 EventDate 直接链接到 Event,而 Estimate 通过 AskEstimate 链接到它。
我想这样做:
User::with([
'reviews.reviewable.event',
'reviews.reviewable.ask_estimate.event'
])->get();
当然它会抛出一个异常:当reviewable是一个EventDate时,它没有任何AskEstimate关系,当它是一个Estimate时,它没有任何Event关系。
那么,根据可审查的价值,我怎样才能得到一个给我一个或另一个的东西呢?
谢谢!
编辑:
这是一个工作版本。
Review::where('user_id', $user->id)
->with([
'reviewable',
])
->loadMorph('reviewable', [
Estimate::class => ['ask_estimate'],
EventDate::class => ['event'],
]);
【问题讨论】:
【参考方案1】:感谢德莱娜的回答。
根据the doc的说法,我认为loadMorph必须这样使用:
User::with('reviews.reviewable')
->limit(1)
->get()
->loadMorph('reviews.reviewable', [
Estimate::class => ['ask_estimate.event'],
EventDate::class => ['event'],
]);
但是有了这个我只得到reviews.reviewable
的结果,我没有得到任何事件或ask_estimate,就像loadMorph没用一样。
【讨论】:
不知道添加了这个方法【参考方案2】:文档中的Nested Lazy Eager Loading & morphTo
部分似乎几乎准确地描述了您要查找的内容。它会“延迟”加载而不是加载,但我想这已经足够接近了。
根据我对文档的理解,您应该可以像这样使用 loadMorph
方法:
User::with('reviews')->get()
->loadMorph('reviews', [
Estimate::class => ['event'],
EventDate::class => ['ask_estimate.event'],
]);
【讨论】:
以上是关于如何渴望加载多态关系的不同嵌套关系?的主要内容,如果未能解决你的问题,请参考以下文章