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 60
和 55
的 Games
:
$games = Game::whereHas('genres', function ($query) {
$query->where('genre_id', '55');
})
->whereHas('genres', function ($query) {
$query->where('genre_id', '60');
})
->get();
我有一个支点 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 60
和 55
的 Games
:
$games = Game::whereHas('genres', function ($query) {
$query->where('genre_id', '55');
})
->whereHas('genres', function ($query) {
$query->where('genre_id', '60');
})
->get();