2

と の 2 つのテーブルがpostsありpagesます。キーワードに基づいて、2 つのテーブルの異なる列でキーワードの出現を検索したいと考えています。2 つのテーブルには関連するコンテンツがありません。

テーブルごとに 1 つずつ、2 つのクエリを作成しました。クエリは次のとおりです。

$result1 = Post::where('title_en', 'LIKE', '%' . $keyword . '%')
                ->or_where('title_np', 'LIKE', '%' . $keyword . '%')
                ->order_by('id', 'desc')
                ->paginate(10);

$result2 = Page::where('title', 'LIKE', '%' . $keyword . '%')
                ->or_where('content', 'LIKE', '%' . $keyword . '%')
                ->order_by('id', 'desc')
                ->paginate(10);

上記のクエリは、2 つの異なるLaravel\Paginatorオブジェクトを返します。しかしLaravel\Paginator、両方のクエリで機能するページ、または上記の両方のクエリの機能を実現する単一のクエリで単一のページネーションが表示されるように、単一のオブジェクトが必要です。どうすればそれができるでしょうか?

4

1 に答える 1

1

これらは無関係なテーブルであるため、Eloquent が処理するには複雑すぎるトリックを行う必要があります。2 つのクエリを結合するには、次のようなことを行う必要があります。クエリ:

$results = DB::query('SELECT id, title FROM ( 
SELECT id, title FROM `post` where `title_np` LIKE "%'.$keyword.'%" OR `title_en` LIKE "%'.$keyword.'%"
UNION ALL
SELECT id, title FROM `page` where `title` LIKE "%'.$keyword.'%" OR `content` LIKE "%'.$keyword.'%"
) temp_table
ORDER BY `id` desc
LIMIT 0, 10
')

注意: 上記はテストされていません。純粋に必要なアプローチの例であり、これが実際に機能するかどうかはわかりません。

于 2013-04-18T22:58:10.817 に答える