我目前正在尝试创建嵌套查询,如下所示:
public function getChallenge($user_id, $opponent_id)
{
$challenge = $this->challenges()
->where('open', true)
->where(function($query) use ($user_id, $opponent_id) {
$query->where('player_1', $user_id)
->where('player_2', $opponent_id);
})
->orWhere(function($query) use ($opponent_id, $user_id) {
$query->where('player_1', $opponent_id)
->where('player_2', $user_id);
})
->first();
return $challenge;
}
Run Code Online (Sandbox Code Playgroud)
这会创建以下查询,例如:
select * from `site_challenges_leagues`
where `site_challenges_leagues`.`league_id` = '1'
and `open` = '1'
and (`player_1` = '3' and `player_2` = '1')
or (`player_1` = '1' and `player_2` = '3')
limit 1
Run Code Online (Sandbox Code Playgroud)
但是,这总是返回表中的第一个值(其中open是1或者0),这是不正确的.为了使查询正确,它需要AND在括号中包含两组查询,如下所示:
select * from `site_challenges_leagues`
where …Run Code Online (Sandbox Code Playgroud)