使用 load() 嵌套预加载

nested eager-loading using load()

一个Post可以有很多评论。

一个评论可以有很多个赞。

当我显示 post 时,我会立即加载它的评论。对于这些评论中的每一个,我都想显示 post 的作者是否喜欢该评论这一事实。

所以我发现自己确实需要 load() 而不是再链接一个 with(),因为我需要先检索 post 的作者 ID ($post->author->id)。 post 的作者 ID 然后通过闭包向下传递。

尽管这实际上工作得很好(它确实是预加载),但我对我的控制器现在看起来多么丑陋感到非常恼火。

有没有办法 scope a load(),就像查询 scope a with() 一样? 我想以一种优雅的方式将该块移动到特征中,而不是让它驻留在我的控制器中。 是的,我正打算将那个令人作呕的部分移到一个函数中,但我真的希望我可以保留 piping/chaining $post = Post::query()->...->findOrFail($id)->???...

下面附上截图。我在寻求指导。代码有效。

我把它移到一个 trait 的方法里。