我有两个表:posts
和pages
。基于关键字,我想在两个表的不同列中搜索关键字的出现。这两张表没有相关内容。
我为每个表写了两个查询。以下是查询:
$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);
上述查询返回两个不同的Laravel\Paginator
对象。但是我想要一个Laravel\Paginator
对象,以便在页面上显示单个分页,该分页既适用于查询,也适用于实现上述查询功能的单个查询。我怎么能这样做?
答案 0 :(得分:1)
由于它们是不相关的表,你需要做一些过于复杂的Eloquent来处理的技巧,你需要做类似以下的事情来将两个查询连接在一起,并且仍然可以做你的限制/排序在合并查询上:
$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
')
注意以上是未经测试的,纯粹是您需要采取的方法的一个示例,不确定这实际上是否有效。