PHPでクエリビルダー記載SQLをEloquentリレーション利用した記述に変更したい

前提

使用しているテーブルは以下のような3テーブルで

・masterA  sub_cd  sub_name ・masterB  sub_cd  a_cd  b_cd ・tableA  a_cd  b_cd   hogeA   hogeB

phpでクエリビルダーを使用している以下のような記述を

$this->builder ->select('masterA.sub_cd', 'masterA.sub_name') ->selectRaw('count(*)'); $this->builder->leftjoin('masterB', function ($join) { $join->on('masterB.sub_cd', '=', 'masterA.sub_cd'); }); $this->builder->leftjoin('tableA', function ($join) { $join->on('masterB.a_cd', '=', 'tableA.a_cd'); $join->on('masterB.b_cd', '=', 'tableA.b_cd'); }); $this->builder ->groupBy('masterA.sub_cd', 'masterA.sub_name') ->orderBy('masterA.sub_cd');

Eloquentリレーションを活用し、主テーブルをmasterAとしたmasterAModelクラス内で
以下のような記述を利用し、実装するにはどのようにしたら良いのでしょうか?

$this->hasMany('masterB','sub_cd','sub_cd')

実現したいこと

試したこと

以下のようにmasterAとmasterBをリレーションを用いた記述で記載するところまではできています。
masterBとtableAをどのようにしたら紐づけることができるのでしょうか?

// public function getJoinData() // { // return $this->hasMany('masterB','sub_cd','sub_cd') // ->select('masterA.sub_cd', 'masterA.sub_name') // ->selectRaw('count(*)') // ->groupBy('masterA.sub_cd', 'masterA.sub_name') // ->orderBy('masterA.sub_cd'); // }

コメントを投稿

0 コメント