Laravel Eloquent - 查询构建器找不到具有函数的列

Laravel Eloquent - Query builder cant find column with having function

我有一个支点 table 'game_genre'(game_id 和 genre_id)。游戏和流派模型具有类似于以下示例的 belongsToMany 关系。

我一直在尝试将同时包含 genre_id 60 和 55 的游戏收集在一起。我一直在使用以下 SQL 查询获得正确的结果,但是当使用以下查询构建器时,我最终在使用 having() 函数时收到列未找到错误。

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'genre_id' in 'having clause'

我不确定如何构建查询生成器?

型号:

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();

您在 HAVING 条件中忘记了聚合函数(在本例中为 COUNT):

$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');

您可以使用以下查询来获取包含 genre_id of 6055Games

$games = Game::whereHas('genres', function ($query) {
                $query->where('genre_id', '55');
            })
            ->whereHas('genres', function ($query) {
                $query->where('genre_id', '60');
            })
            ->get();