Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在一个查询中包含“AND”和“AND”或“OR”的Laravel MySQL查询_Php_Mysql_Laravel - Fatal编程技术网

Php 在一个查询中包含“AND”和“AND”或“OR”的Laravel MySQL查询

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

我在执行一些选择查询以创建搜索方法时遇到问题。 这是我的桌子结构 表“用户”: 姓名| varchar, 用户名| varchar, 角色|枚举[管理员、所有者、出纳], 地址|文本

我制作了一个ajax脚本,将一个名为query的参数发送到我的Laravel控制器中。此查询参数包含用户在my admin.blade.php页面中搜索某些数据的输入,该页面仅显示用户表中具有管理员角色的用户。我的问题是:

$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的答案成为最好的答案,因为他先回答。但无论如何,非常感谢。