Laravel雄辩查询建筑物或
问题描述:
这eloquent
查询过滤器:Laravel雄辩查询建筑物或
return $this->games()
->where(function ($query) {
$query->where('active_player_id', '=', $this->id)
->where('stage_name', '<>', 'setup');
})
->orWhere(function ($query) {
$query->where('active_player_id', '<>', $this->id)
->where('stage_name', '=', 'setup');
});
构建成这样的SQL:
where `games_players`.`player_id` = '1'
and (`active_player_id` = '1' and `stage_name` <> 'setup')
or (`active_player_id` <> '1' and `stage_name` = 'setup')
如何改变eloquent
代码来构建这个查询(在OR
左右括号):
where `games_players`.`player_id` = '1'
and (
(`active_player_id` = '1' and `stage_name` <> 'setup')
or (`active_player_id` <> '1' and `stage_name` = 'setup')
)
答
你可以请这样做:
->where('active_player_id',1)
->where(function($q){
$q->where([ ['active_player_id', 1],['stage_name','!=', 'setup'] ])
->orWhere([ ['active_player_id','!=', 1],['stage_name', 'setup'] ]
})->get()
答
我没有一个实例的雄辩手来测试,但现在它会是这样的东西?
return $this->games()
->where(function ($query) {
$query->where(function ($query) {
$query->where('active_player_id', '=', $this->id)
->where('stage_name', '<>', 'setup');
})
->orWhere(function ($query) {
$query->where('active_player_id', '<>', $this->id)
->where('stage_name', '=', 'setup');
})
})
;
也就是说,你把组合在一起成为地方上的匿名功能的条件?
答
请尝试移动orWhere
条件到这样的第一个匿名函数,
return $this->games()
->where(function ($query) {
$query->where('active_player_id', '=', $this->id)
->where('stage_name', '<>', 'setup')
->orWhere(function ($query) {
$query->where('active_player_id', '<>', $this->id)
->where('stage_name', '=', 'setup');
});
})
的可能的复制[Laravel雄辩ORM - 复杂哪里查询(https://stackoverflow.com/questions/29036959/laravel-雄辩-ORM复杂,其中查询) –