Laravel Eloquent Where , orWhere 和 Find 在同一个 eloquent 查询中的问题

Problem with Laravel Eloquent Where , orWhere and Find in a same eloquent query

如何使用 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 51 的结果,即使 id 是 52,53,54 但结果显示为 Id 51.

谢谢 塔米姆

您可以在将闭包传递给 where 时对条件进行分组。

$link = Link::query()
    ->where(function ($query) {
        $query->where('user_id', Auth::id())
            ->orWhere('user_ip', \request()->ip())
    })
    ->with('clicks')
    ->findOrFail($id);