我有一个数据透视表' game_genre'(使用game_id和genre_id)。游戏和流派模型的belongsToMany
关系类似于以下示例。
我一直在尝试收集同时包含60和55的genre_id的游戏。我使用以下SQL查询获得了正确的结果,但在使用以下查询构建器时,我最终在使用having()
函数时收到列未找到错误。
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'genre_id' in 'having clause'
我不确定如何构建查询构建器?
MODEL:
class Game extends Model
{
public function genres()
{
return $this->belongsToMany('App\Genre');
}
}
SQL:
SELECT *
FROM game_genre
WHERE genre_id = 55 OR genre_id = 60
GROUP BY game_id
HAVING COUNT(DISTINCT genre_id) = 2;
控制器:
$game = Game::whereHas('genres', function ($query)
{
$query->where('genre_id', '55')
->orWhere('genre_id', '60')
->groupBy('game_id')
->having('genre_id','=', 2);
})->get();
答案 0 :(得分:4)
您忘记了COUNT
条件中的汇总功能(在本例中为HAVING
):
$query->where('genre_id', '55')
->orWhere('genre_id', '60')
->groupBy('game_id')
->havingRaw('COUNT(DISTINCT genre_id) = 2');
您可以使用带有数组的where()
,而不是在查询中添加多个orWhere()
和whereIn()
:
$myArray = [55,60];
$query->whereIn('genre_id', $myArray)
->groupBy('game_id')
->havingRaw('COUNT(DISTINCT genre_id) = 2');
答案 1 :(得分:0)
您可以使用以下查询来获取Games
genre_id
60
和55
的{{1}}:
$games = Game::whereHas('genres', function ($query) {
$query->where('genre_id', '55');
})
->whereHas('genres', function ($query) {
$query->where('genre_id', '60');
})
->get();