【问题标题】:Laravel MySQL query that have 'AND' and 'OR' inside one query [duplicate]在一个查询中包含“AND”和“OR”的 Laravel MySQL 查询 [重复]
【发布时间】:2020-03-21 22:31:29
【问题描述】:

我在执行一些 SELECT 查询以创建“搜索”方法时遇到问题。 这是我的表结构 table 'users': name | varchar, username | varchar, role | enum[Admin, Owner, Cashier], address | text

我制作了一个 ajax 脚本,它将一个名为query 的参数发送到我的Laravel Controller。此query 参数包含来自用户在我的admin.blade.php 页面中搜索某些数据的输入,该页面仅显示用户表中具有Admin 角色的用户。这是我的查询:

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

您不必关注join。我的问题的重点是上面的查询还返回具有OwnerCashier 角色的用户。例如,我有一个名为JohnAdmin 和一个名为OwnerJane,它们的地址相同,例如New York。当用户在搜索框中输入New York 时,上面的查询应该只返回John。但是,就我而言,它也返回Jane

我该如何进行查询?

希望你能理解我的问题。谢谢。

【问题讨论】:

标签: php mysql laravel


【解决方案1】:

您可以在下面的函数中使用 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();

【讨论】:

  • 为什么我在->orderBy('users.user_id')上方得到syntax error, unexpected '}'
  • 尝试编辑代码:)
  • 啊,我明白了,我忘记了分号。感谢您的时间和帮助@Dilip Hirapara。
【解决方案2】:

试试这个:

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

【讨论】:

  • 您的回答类似于 Dilip Hirapara 的回答,它解决了我的问题。但我必须将 Dilip Hirapara 的答案作为最佳答案,因为他首先回答。但无论如何,非常感谢。
猜你喜欢
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2012-06-18
  • 2012-03-09
  • 1970-01-01
  • 2021-11-14
相关资源
最近更新 更多