通过雄辩的查询在多个表中搜索

时间:2013-04-18 10:51:07

标签: php laravel

我有两个表:postspages。基于关键字,我想在两个表的不同列中搜索关键字的出现。这两张表没有相关内容。

我为每个表写了两个查询。以下是查询:

$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对象,以便在页面上显示单个分页,该分页既适用于查询,也适用于实现上述查询功能的单个查询。我怎么能这样做?

1 个答案:

答案 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
')

注意以上是未经测试的,纯粹是您需要采取的方法的一个示例,不确定这实际上是否有效。