union all で2つのテーブルを結合する例。
union all は重複したデータも取得、重複したデータは1つだけ取得したい場合は union を使用する。
- $builder_01 = Eloquent_01::select(
- DB::raw('"01" as type'),
- 'id',
- 'name',
- 'status',
- DB::raw('null as status_02'),
- 'created_at'
- );
- $builder_02 = Eloquent_02::select(
- DB::raw('"02" as type'),
- 'id',
- 'name',
- 'status',
- 'status_02',
- 'created_at'
- )
- ->with('db_table_name');
- $user_unions = $builder_02
- ->unionAll($builder_01)
- ->orderBy('created_at', 'desc')
- ->paginate(20);
union 時に、両方のテーブルから取得するするカラムを合わせる必要がある。そのため、select 区で同じカラムを抽出するように調整する。
DB::raw('“01” as type') のように書くことで、テーブルを判別するカラムを追加したりできる。
片方のテーブルにしかないカラムを取得したい場合は、もう片方のテーブルで DB::raw('null as status_02') のようにカラムを追加してやればよい。
with で合わせて取得したいテーブルがあった場合、片方のテーブルでしかリレーションしてなくてもOK。 もちろん使うときは、存在する方でのみ呼び出すような制御は必要。
コメント