Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I add brackets on the laravel eloquent? (Laravel 5.3)

My query is like this :

SELECT * FROM message WHERE (seller_id = 1 OR buyer_id = 3) AND deleted_by NOT LIKE '%1%'

I want change it to laravel eloquent

I try like this :

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

But, the result like this :

SELECT * FROM message WHERE seller_id = 1 OR buyer_id = 3 AND deleted_by NOT LIKE '%1%'

Seems it need brackets

How can I add brackets on the laravel eloquent?

like image 619
samuel toh Avatar asked Mar 16 '17 04:03

samuel toh


3 Answers

You need to put your where in a closure

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();
like image 108
EddyTheDove Avatar answered Nov 15 '22 17:11

EddyTheDove


In such cases, use closure.

$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();
like image 20
Abdullah Al Shakib Avatar answered Nov 15 '22 17:11

Abdullah Al Shakib


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();

Try this, may be your problem get resolved.

like image 42
Manoj Sharma Avatar answered Nov 15 '22 17:11

Manoj Sharma