我有一个数据透视表'game_genre'(带有game_id和genre_id)。游戏和流派模型具有类似于以下示例的关系belongsToMany
。Laravel Eloquent - 查询生成器找不到具有函数的列
我一直在试图收集包含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();
- > having('genre_id','=',2);应该是 - > having('genre_id','=',2) –
或者尝试 - > havingRaw('genre_id = 2') –
如果你想获得gener_jd的游戏60 & 55;你可以把关系函数(gener)在放置语句的Game模型中返回$ this-> belongsToMany(Gener :: class,'game_gener');然后尝试从这个查询中得到结果$ games = Game :: gener() - > where('gener_id',55) - > orWhere('gener_id',60) - > get();确保你将关系函数设置为静态,否则你必须调用关系函数关于对象; –