[Laravel]孫の集計を行う

Laravelロゴ

Laravelで孫テーブルの集計をしたい場合は hasManyThrough を使ってリレーションを定義した上で、hasManyThroughで定義したリレーションに対してwithCount()などの集計関数を使う。
具体的にはこんな感じ

public function hoge(){
  return $this->hasManyThrough(
    孫 Model,
    子 Model,
    '親_id', // 子テーブルの親ID
    '子_id', // 孫モデルの子ID
    'id', // 親テーブルのローカルキー
    'id' // 子テーブルのローカルキー
  );
}

などと定義した上で

Model::withCount(‘hoge’)->get();

などとすると hoge_count に結果が返ってきます。

子供や孫の絞り込みを行いたい場合は

public function hoge(){
  return $this->hasManyThrough(
    孫 Model,
    子 Model,
    '親_id', // 子テーブルの親ID
    '子_id', // 孫モデルの子ID
    'id', // 親テーブルのローカルキー
    'id' // 子テーブルのローカルキー
  )->where('孫.status',1);
}

みたいな感じで検索条件を指定してあげればOK。
動的な条件の追加はできないぽい?ので、別の条件のものがある場合は別途定義してあげることが必要みたいでした。

タイトルとURLをコピーしました