4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LaravelのEloquentでリレーション先の集計

Posted at

顧客一覧画面にて今までの予約件数がどれぐらいあるか知りたかった時
リレーションの中で集計して取得することができたので書いておきます。

テーブルの関係は下記の通りです
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}}
な感じで表示できるはず

4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?