ユーザ用ツール

サイト用ツール


プログラム言語:php:laravel:union_all

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

プログラム言語:php:laravel:union_all [2022/07/21 18:36] (現在)
humolife 作成
行 1: 行 1:
 +====== 【Laravel】union all で2つのテーブルのデータを結合 ======
 +union all で2つのテーブルを結合する例。\\
 +union all は重複したデータも取得、重複したデータは1つだけ取得したい場合は union を使用する。
 +<code:php>
 +$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);
 +</code>
 +==== 以下ざっくり解説 ====
 +=== select ===
 +union 時に、両方のテーブルから取得するするカラムを合わせる必要がある。そのため、select 区で同じカラムを抽出するように調整する。
 +
 +DB::raw('"01" as type') のように書くことで、テーブルを判別するカラムを追加したりできる。
 +
 +片方のテーブルにしかないカラムを取得したい場合は、もう片方のテーブルで DB::raw('null as status_02') のようにカラムを追加してやればよい。
 +
 +=== with ===
 +with で合わせて取得したいテーブルがあった場合、片方のテーブルでしかリレーションしてなくてもOK。
 +もちろん使うときは、存在する方でのみ呼び出すような制御は必要。
プログラム言語/php/laravel/union_all.txt · 最終更新: 2022/07/21 18:36 by humolife