【问题标题】: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'],
            ]);

【问题讨论】:

    标签: laravel eloquent polymorphism relationship


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-31
      • 2016-08-18
      • 2014-02-24
      • 2020-05-10
      • 1970-01-01
      • 2013-04-15
      • 2019-06-19
      • 2015-05-16
      相关资源
      最近更新 更多