概要
Laravelでのクエリにて、UNIONせざるを得なく、そうするとorder byで並び替える必要があり、最終的に画面に表示する際にはページネーションを考える必要がある場合、その通りに実装してもエラーが出てしまったので備忘録を残します!
サンプルコード
$queryA = DB::table('table_a AS ta')
->select(
DB::raw('1 AS sort_1')
,ta.id AS sort_2
,ta.*
);
$queryB = DB::table('table_b AS tb')
->select(
DB::raw('2 AS sort_2')
,tb.ymdhm AS sort_2
,tb.*
);
// union
$query = $queryA->unionAll($queryB);
// orderByがあるとpaginate()が使えないので自前でpaginatorを作成
$totalCount = (clone $query)->count();
$result = DB::query()->fromSub($query, 'sub')
->orderBy('sort_1')
->orderBy('sort_2')
->skip($countForPage * (($page ?? 1) -1))
->take($countForPage)
->get();
$paginator = new LengthAwarePaginator($result, $totalCount, $countForPage, $page);
オススメ


コメント