Php 在一个查询中包含“AND”和“AND”或“OR”的Laravel MySQL查询
我在执行一些选择查询以创建搜索方法时遇到问题。 这是我的桌子结构 表“用户”: 姓名| varchar, 用户名| varchar, 角色|枚举[管理员、所有者、出纳], 地址|文本 我制作了一个ajax脚本,将一个名为query的参数发送到我的Laravel控制器中。此查询参数包含用户在my admin.blade.php页面中搜索某些数据的输入,该页面仅显示用户表中具有管理员角色的用户。我的问题是:Php 在一个查询中包含“AND”和“AND”或“OR”的Laravel MySQL查询,php,mysql,laravel,Php,Mysql,Laravel,我在执行一些选择查询以创建搜索方法时遇到问题。 这是我的桌子结构 表“用户”: 姓名| varchar, 用户名| varchar, 角色|枚举[管理员、所有者、出纳], 地址|文本 我制作了一个ajax脚本,将一个名为query的参数发送到我的Laravel控制器中。此查询参数包含用户在my admin.blade.php页面中搜索某些数据的输入,该页面仅显示用户表中具有管理员角色的用户。我的问题是: $data = DB::table('users')
$data = DB::table('users')
->join('outlets','users.outlet_id','outlets.outlet_id')
->where('users.role','Admin')
->where('users.nama','like','%'.$query.'%')
->where('users.username','like','%'.$query.'%')
->orWhere('outlets.nama_outlet','like','%'.$query.'%')
->orWhere('users.address','like','%'.$query.'%')
->orderBy('users.user_id')
->get();
你不必关注加入。我的问题是,上面的查询还返回具有所有者和出纳角色的用户。例如,我有一个名为John的管理员和一个名为Jane的所有者,他们都有相同的地址,比如纽约。当用户在搜索框中键入newyork时,上面的查询应该只返回John。但是,在我的例子中,它也返回Jane
我必须如何进行查询
我希望你能理解我的问题。谢谢。您可以在函数中使用where查询,如下所示
$data = DB::table('users')
->join('outlets','users.outlet_id','outlets.outlet_id')
->where('users.role','Admin')
->where(function($q) use ($query) {
$q->where('users.nama','like','%'.$query.'%');
$q->orWhere('users.username','like','%'.$query.'%');
$q->orWhere('outlets.nama_outlet','like','%'.$query.'%');
$q->orWhere('users.address','like','%'.$query.'%');
})->orderBy('users.user_id')
->get();
试试这个:
$data = DB::table('users')
->join('outlets','users.outlet_id','outlets.outlet_id')
->where('users.role','Admin')
->Where(function($query) use ($name){
$query->where('users.nama','like','%'.$query.'%')
->orWhere('users.username','like','%'.$query.'%')
->orWhere('outlets.nama_outlet','like','%'.$query.'%')
->orWhere('users.address','like','%'.$query.'%');
})
->orderBy('users.user_id')
->get();
这回答了你的问题吗?是的。非常感谢您的帮助@El_Vanja,抱歉我的无知。为什么我会出现语法错误,上面出现意外的“}”->orderBy“users.user_id”?尝试编辑代码:啊,我明白了,我忘记了分号。感谢您的时间和帮助@Dilip Hirapara。您的答案与Dilip Hirapara的答案类似,它解决了我的问题。但我必须让Dilip Hirapara的答案成为最好的答案,因为他先回答。但无论如何,非常感谢。