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

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

所有 Model 对照 github 源码

file

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 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年前 评论

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