gpt4 book ai didi

php - Laravel Eloquent - 查询构建器找不到具有功能的列

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:43 24 4
gpt4 key购买 nike

我有一个数据透视表“game_genre”(带有 game_id 和 genre_id)。游戏和流派模型具有类似于以下示例的 belongsToMany 关系。

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

SQLSTATE[42S22]:未找到列:1054 “having 子句”中的未知列“genre_id”

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

型号:

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;

Controller :

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

关于php - Laravel Eloquent - 查询构建器找不到具有功能的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40631743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com