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。 もちろん使うときは、存在する方でのみ呼び出すような制御は必要。
コメント