Laravel Eloquent Where , orWhere 和 Find 在同一个 eloquent 查询中的问题
Posted
技术标签:
【中文标题】Laravel Eloquent Where , orWhere 和 Find 在同一个 eloquent 查询中的问题【英文标题】:Problem with Laravel Eloquent Where , orWhere and Find in a same eloquent query 【发布时间】:2021-11-06 16:03:52 【问题描述】:如何使用 Laravel Eloquent 编写此查询
"SELECT * FROM links WHERE (user_id = 1 OR user_ip = '127.0.0.1') AND id = 53 LIMIT 1"
我写过这个: `
$link = Link::query()
->where('user_id', Auth::id())
->orWhere('user_ip', \request()->ip())
->with('clicks')
->findOrFail($id);
而这个的SQL版本是:"SELECT * FROM links WHERE user_id = 1 OR user_ip = '127.0.0.1' AND id = 53 LIMIT 1"
;
它总是显示出意想不到的结果,例如: 即使 id 为 52、53、54,它也每次显示 id 51 的结果,但结果显示为 id 51。
谢谢 塔米姆
【问题讨论】:
你能用你的数据库结构和相关表中的数据来编辑你的问题吗? 你有没有考虑到还有一个OR条件,先执行AND然后OR条件 我得到了解决方案,谢谢重播 【参考方案1】:您可以在将闭包传递给where
时对条件进行分组。
$link = Link::query()
->where(function ($query)
$query->where('user_id', Auth::id())
->orWhere('user_ip', \request()->ip())
)
->with('clicks')
->findOrFail($id);
【讨论】:
非常感谢,先生以上是关于Laravel Eloquent Where , orWhere 和 Find 在同一个 eloquent 查询中的问题的主要内容,如果未能解决你的问题,请参考以下文章
Eloquent:find() 和 where() 用法 laravel
Laravel Eloquent - 返回 Where Has + Where [重复]
如何处理带有斜线的 Laravel Eloquent “WHERE”查询? (Laravel 5.3)
如何使用 Laravel Eloquent 创建多个 Where 子句查询?