顧客一覧画面にて今までの予約件数がどれぐらいあるか知りたかった時
リレーションの中で集計して取得することができたので書いておきます。
テーブルの関係は下記の通りです
Guest:顧客でReservationを複数持っている
Reservation:予約情報
まずはリレーションでカウントするコード
Guest.php
public function reservationCountRelation()
{
return $this->hasOne(Reservation::class)->select('guest_id', \DB::raw('COUNT(*) as count'))->groupBy('guest_id');
}
select部分でCountを書いてgroupByすることで集計をしたレコードを返しています。
このままでも一応集計情報自体は取得できますがアクセスしにくいので
アクセス用の関数も追加
Guest.php
public function getReservationCountAttribute()
{
// リレーション先が無い場合0を返却
return $this->reservationCountRelation ? $this->reservationCountRelation->count : 0;
}
あとはQuery発行する部分で忘れずwith指定してやればOK
{{$guest->reservation_count}}
な感じで表示できるはず