Laravel 在关系条件中查询 Where 关系

Laravel Query Where Relationship within Relationship Condition

长期以来一直在尝试解决此查询,它正在运行,但有一些错误查询。

这是我使用 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' 的姓名,查询将 return 正确的结果,但如果我输入 Jason 的用户名,它将 return Jason 更新的每条记录(但不活跃)我只想要 return 具有特定名称或用户名的操作。

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

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.'%');
 });

如果有效请告诉我。