如何在Laravel Eloquent中添加括号?(Laravel 5.3)

10
我的查询语句如下:
SELECT * FROM message WHERE (seller_id = 1 OR buyer_id = 3) AND deleted_by NOT LIKE '%1%'

我希望将它转化为 Laravel Eloquent。

我尝试了如下方式:

Message::where('seller_id', auth()->user()->id)
       ->orWhere('buyer_id', auth()->user()->id)
       ->where('deleted_by', 'not like', '%'.auth()->user()->id.'%')
       ->get();

但是,结果看起来像这样:
SELECT * FROM message WHERE seller_id = 1 OR buyer_id = 3 AND deleted_by NOT LIKE '%1%'

似乎需要括号

我如何在Laravel Eloquent中添加括号?

4个回答

20

你需要将"where"放在一个闭包中。

Message::where(function($query){
    $query->where('buyer_id', auth()->user()->id)
    ->orWhere('buyer_id', auth()->user()->id);
})
->where('deleted_by', 'not like', '%'.auth()->user()->id.'%')
->get();

我还在 $query 实例之前添加了对象类型 "Builder"。 完整的 Builder 命名空间是 "Illuminate\Database\Eloquent\Builder;"。 - Amin Eshtiaghi

7
在这种情况下,使用闭包。
$userId = auth()->user()->id;
Message::where(function($q) use($userId){
    $q->where('buyer_id', $userId)
    ->orWhere('buyer_id', $userId);
})
->where('deleted_by', 'not like', '%'.$userId.'%')
->get();

4
Message::where(function ($query) {
    $query->where('seller_id', auth()->user()->id)
      ->orWhere('buyer_id', auth()->user()->id);
})
->where('deleted_by', 'not like', '%'.auth()->user()->id.'%')
->get();

尝试这个,也许可以解决你的问题。

3
试试这个:
Message::where(function ($query) {
            $query->where('seller_id', auth()->user()->id)
                  ->orWhere('buyer_id', auth()->user()->id);
        })->where('deleted_by', 'not like', '%'.auth()->user()->id.'%')->get();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接