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.'%');
});
如果有效请告诉我。
长期以来一直在尝试解决此查询,它正在运行,但有一些错误查询。
这是我使用 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.'%');
});
如果有效请告诉我。