全局范围内左连接的列有歧义



我使用的是Laravel 9.39.0, php 8.1, mysql 8.0.31.

我的目标是添加一个作用域来过滤模型,其中user_id引用的用户已经被归档或以某种方式过滤了。用户的过滤在另一个作用域中完成。

仅在作用域中使用$builder->has('user');就可以了,但是eloquent将使用一个不那么高效的exists查询。(这将在以后的多态关系中工作,这是性能影响非常明显的地方)。所以我尝试创建一个连接,而不是有,这将是更有效的。它在索引视图上工作得很好,但当我试图显示单个模型时,我得到:"**完整性约束违反:1052列'id'在where子句是含糊不清的"。**如果我在模型控制器中转储show-function的查询,我可以看到它尝试:where id = ? limit 1和id没有以模型名称为前缀,从而导致错误。

即使下面这个作用域内的基本代码也会产生错误。

builder->leftJoin('users', 'users.id', 'projects.user_id')

以上代码生成以下查询:

select * from `projects` left join `users` on `users`.`id` = `projects`.`user_id` where `id` = ? limit 1

是否有一种方法可以强制eloquent在查询中添加表名的前缀?

谢谢你的阅读,我希望你能帮助。

我已经尝试了很长时间的谷歌搜索,我试图使用雄辩的力量加入包,但它没有工作…

您可以使用:

$builder->leftJoin('users', 'users.id', 'projects.user_id')->where("users.id",1);

相关内容

  • 没有找到相关文章

最新更新