Laravelでhaving句を使って集計を行うとき、こんな書き方をする。
Model::withCount('xxxx')->having('xxxx_count', '>', 1);
ただ、paginateを付けたい場合
Model::withCount('xxxx')->having('xxxx_count', '>', 1)->paginate(20);
とやると、エラーが出る。
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'xxxx_count' in 'having clause' (SQL: select count(*) as aggregate from `hoges` having `xxxx_count` > 1)
エラー文にある通り、カラムをcount(*)に置き換えただけのselect文を発行してから処理を行うため、having句に使うカラムが消えてエラーになってしまっている。
対策
泥臭いけどこう
$ids = Model::withCount('xxxx')->having('xxxx_count', '>', 1)->get()->pluck('id'); Model::whereIn('id', $ids)->paginate(20);
もっといいやり方があったら教えて欲しい