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 子句查询?

如何使用 Laravel Eloquent 创建多个 Where 子句查询?

Laravel Eloquent LEFT JOIN WHERE NULL