【问题标题】:Eloquent orWhere() is not working with previous where() methods as expectedEloquent orWhere() 不能按预期使用以前的 where() 方法
【发布时间】:2020-06-24 08:23:42
【问题描述】:

我正在处理好友请求路由。

希望我的代码能够正常工作

$friends=[];
    foreach (auth()->user()->friends as $friend)
    $friends[]=$friend->id;

    $people = User::query()
    ->where('id', '!=', auth()->user()->id)
    ->whereNotIn('id', $friends)
    ->where('name', 'LIKE', "%$request->search%")
    ->orWhere('email', 'LIKE', "%$request->search%")
    ->get();

但这段代码的工作原理是

where ( 'id'!=auth()->user()->id and 'id' not in [...] and 'name' like '$name' ) or 'email' like '$email'

我希望这可以作为

where 'id'!=auth()->user()->id and 'id' not in [...] and ('name' like '$name' or 'email' like '$email')



然后我将代码更改为:

$friends=[];
    foreach (auth()->user()->friends as $friend)
    $friends[]=$friend->id;

    $people = User::query()
    ->where('name', 'LIKE', "%$request->search%")
    ->where('id', '!=', auth()->user()->id)
    ->whereNotIn('id', $friends)
    ->orWhere('email', 'LIKE', "%$request->search%")
    ->where('id', '!=', auth()->user()->id)
    ->whereNotIn('id', $friends)
    ->get();

这对我有用,但我认为它不合适。 请指导。

【问题讨论】:

  • 我认为您的朋友数组不正确尝试dd朋友数组并在此处发布回复。

标签: php laravel eloquent where-clause laravel-7


【解决方案1】:

您可以像这样使用“参数分组”:

$people = User::query()
    ->where('id', '!=', auth()->user()->id)
    ->whereNotIn('id', $friends)
    ->where(function ($query) use ($request) {
        $query->where('name', 'LIKE', "%$request->search%")
            ->orWhere('email', 'LIKE', "%$request->search%");
    })
    ->get();

如您所见,将Closure 传递到where 方法会指示查询生成器开始一个约束组。 Closure 将收到一个查询构建器实例,您可以使用它来设置应包含在括号组中的约束。

请参阅Laravel docs 了解更多信息。

【讨论】:

    【解决方案2】:

    您需要为此使用查询。

    是这样的:

    更多信息可以查看Documentation

    
        $people = User::query()
        ->where('id', '!=', auth()->user()->id)
        ->whereNotIn('id', $friends)
        ->where(function ($query) {
          $query->where('name', 'LIKE', "%$request->search%")
                ->orWhere('email', 'LIKE', "%$request->search%")
        })->get();
    
    

    【讨论】:

    • 我没有尝试这个请求,它只是使用的概念。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2020-01-01
    • 2019-05-24
    • 2021-10-11
    • 2020-10-03
    • 2016-12-26
    • 2021-11-06
    相关资源
    最近更新 更多