ユーザ用ツール

サイト用ツール


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

【Laravel】union all で2つのテーブルのデータを結合

union all で2つのテーブルを結合する例。
union all は重複したデータも取得、重複したデータは1つだけ取得したい場合は union を使用する。

  1. $builder_01 = Eloquent_01::select(
  2. DB::raw('"01" as type'),
  3. 'id',
  4. 'name',
  5. 'status',
  6. DB::raw('null as status_02'),
  7. 'created_at'
  8. );
  9.  
  10. $builder_02 = Eloquent_02::select(
  11. DB::raw('"02" as type'),
  12. 'id',
  13. 'name',
  14. 'status',
  15. 'status_02',
  16. 'created_at'
  17. )
  18. ->with('db_table_name');
  19.  
  20. $user_unions = $builder_02
  21. ->unionAll($builder_01)
  22. ->orderBy('created_at', 'desc')
  23. ->paginate(20);

以下ざっくり解説

select

union 時に、両方のテーブルから取得するするカラムを合わせる必要がある。そのため、select 区で同じカラムを抽出するように調整する。

DB::raw('“01” as type') のように書くことで、テーブルを判別するカラムを追加したりできる。

片方のテーブルにしかないカラムを取得したい場合は、もう片方のテーブルで DB::raw('null as status_02') のようにカラムを追加してやればよい。

with

with で合わせて取得したいテーブルがあった場合、片方のテーブルでしかリレーションしてなくてもOK。 もちろん使うときは、存在する方でのみ呼び出すような制御は必要。

コメント

コメントを入力. Wiki文法が有効です:
 
プログラム言語/php/laravel/union_all.txt · 最終更新: 2022/07/21 18:36 by humolife