【问题标题】:Problem with Laravel Eloquent Where , orWhere and Find in a same eloquent queryLaravel Eloquent Where , orWhere 和 Find 在同一个 eloquent 查询中的问题
【发布时间】: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条件
  • 我得到了解决方案,谢谢重播

标签: laravel eloquent query-builder laravel-query-builder


【解决方案1】:

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

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

【讨论】:

  • 非常感谢,先生
猜你喜欢
  • 2020-01-01
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多