我加入 ?include=topic.user 出现 N+1 ,是我哪里出现问题呢?

?include=topic 时, sql 没有 N+1
file
?include=topic.user 时,出现大量 users表查询
file

所有 Model 对照 github 源码

file

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
liyu001989
最佳答案

@getelephant @Kevinvinvin @ejellyfish @JunLee @maxotm @swfszf @BboyFate

https://github.com/dingo/api/blob/v2.0.0/s...
问题找到了,不是 laravel 的问题,dingo 升级到 2.0 之后加入了上面的代码,要求必须是 AvailableIncludes 中设置过的才能预加载。

这导致只预加载了 topic,应该是个 bug,如果是线上的环境可以先切换回 2.0.0 以下的版本。等待一下新的 pr,我研究一下

5年前 评论
讨论数量: 11
liyu001989

file

看样子是 topic transformer 中的问题,你检查一下

5年前 评论

@liyu001989
还是找不到问题所在...帮忙指点一下逻辑 :pray:
file
file

5年前 评论
liyu001989

我也没看出来。。。逻辑就是 相当于 ->load($request->include),你确定一下 include 参数是不是正确传过来了,要不去 dingo 预加载的地方加日志调试一下?

怎么感觉是环境的问题呢。。。

5年前 评论

@BboyFate 我也遇到同样问题,有没有解决办法

5年前 评论

我也是一样的问题,代码去github一一对照了,不管是trasformer还是models里的还是Controllers/Api里的控制器全都看了一遍,还是没有找到办法。

5年前 评论

@liyu001989 大佬,目前同上都是5.7版本出现问题,是版本问题么?经测试由include=topic.user换成include=topic,user就没有N+1的问题了。这里有什么更好的解决方案么?

5年前 评论
liyu001989

@getelephant @Kevinvinvin @ejellyfish @JunLee @maxotm @swfszf @BboyFate

https://github.com/dingo/api/blob/v2.0.0/s...
问题找到了,不是 laravel 的问题,dingo 升级到 2.0 之后加入了上面的代码,要求必须是 AvailableIncludes 中设置过的才能预加载。

这导致只预加载了 topic,应该是个 bug,如果是线上的环境可以先切换回 2.0.0 以下的版本。等待一下新的 pr,我研究一下

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!