【问题标题】:Laravel Query Where Relationship within Relationship ConditionLaravel查询关系条件中的关系
【发布时间】:2021-08-30 00:06:06
【问题描述】:

一直在尝试解决这个查询很长时间,它正在工作,但有一点错误查询。

这是我使用 livewire 的搜索功能提出的查询之一。

return empty($search)
    ? static::query()  
    : static::query()->where('id','like','%'.$search.'%')
        ->orWhereHas('status.user',function($q) use ($search){
            $q->where('active',1)
                ->where('name','like','%'.$search.'%')
                ->orWhere('username','like','%'.$search.'%');
        });

例如,我输入“jason”的名称,查询将返回正确的结果,但如果我输入 Jason 的用户名,它将返回 Jason 已更新(但未激活)的每条记录,我只希望操作返回特定的名称或用户名。

我已经尝试在不同的函数上将活动、名称和用户名分开,但结果是一样的。

【问题讨论】:

    标签: laravel eloquent laravel-8 eager-loading


    【解决方案1】:

    AND 优先于 OR 所以这个条件

    $q->where('active',1)
      ->where('name','like','%'.$search.'%')
      ->orWhere('username','like','%'.$search.'%');
    

    正在评估 - where ( active = 1 and name like '%$search%' ) or username like '%$search%'

    但如果我没记错的话,那么你想要像where active = 1 and ( name like '%$search%' or username like '%$search%') 这样的东西

    要实现这一点,您可以尝试隔离上述条件,例如 -

     $q->where('active',1)
       ->where(function($q2) use ($search){
             $q2->where('name','like','%'.$search.'%')
             $q2->orWhere('username','like','%'.$search.'%');
     });
    

    如果有效,请告诉我。

    【讨论】:

    • 这解决了我的问题,我使用这个 $q2->where('username','like','%'.$search.'%')->orWhere('name','比如','%'.$search.'%');而只是个人喜好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 2021-10-19
    • 2021-10-09
    • 2019-01-10
    相关资源
    最近更新 更多