首页 > 解决方案 > laravel sql问题与查询where和or,丢失条件

问题描述

我试图在 laravel 中编写 sql 查询:

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 . '%'))

我现在有:

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

我的问题是条件已删除 = 0,我的 sql 忽略了它。怎么了?谢谢你的建议!

标签: mysqllaraveleloquent

解决方案


你可以照常 where(function(){})使用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);

推荐阅读