Alexey
Alexey

Reputation: 13

laravel sql problem with query where and or, lost condition

im trying to write sql query in laravel:

select * from products where deleted=0 AND 
(('name_ru','LIKE', '%' . $request->q_search . '%')
OR ('name_en','LIKE', '%' . $request->q_search . '%')
OR ('name_lv','LIKE', '%' . $request->q_search . '%'))

now i have:

$products = DB::table('product')
   ->select('id','name_lv', 'name_ru', 'name_en','price','desc')
   ->where('deleted',0)
   ->where('name_lv','LIKE', '%' . $request->q_search . '%')
   ->orWhere('name_ru','LIKE', '%' . $request->q_search . '%')
   ->orwhere('name_en','LIKE', '%' . $request->q_search . '%')
   ->distinct()
   ->orderBy('price', 'desc')
   ->paginate(10,['*'], 'found')
   ->onEachSide(6);

my problem is with condition deleted=0, my sql ignores it. Whats wrong? thanks for advice!

Upvotes: 0

Views: 161

Answers (1)

Kamlesh Paul
Kamlesh Paul

Reputation: 12391

you can use where(function(){}) as you have where AND (.. OR ..)

$products = DB::table('product')
    ->select('id', 'name_lv', 'name_ru', 'name_en', 'price', 'desc')
    ->where(function ($q) use ($request) {
        $q->where('name_lv', 'LIKE', '%' . $request->q_search . '%')
            ->orWhere('name_ru', 'LIKE', '%' . $request->q_search . '%')
            ->orwhere('name_en', 'LIKE', '%' . $request->q_search . '%');
    })
    ->where('deleted', 0)
    ->distinct()
    ->orderBy('price', 'desc')
    ->paginate(10, ['*'], 'found')->onEachSide(6);

Upvotes: 2

Related Questions