这是我的问题:
$first = DB::table('news')
->selectRaw('"news" as tableName, id, title, description, imgPath')
->where(function($query) use ($q) {
$query->whereRaw("MATCH(title,description) AGAINST(? IN BOOLEAN MODE)", array($q));
});
$results = DB::table('productions')
->selectRaw('"productions" as tableName, id, title, description, imgPath')
->where(function($query) use ($q) {
$query->whereRaw("MATCH(title,description) AGAINST(? IN BOOLEAN MODE)", array($q));
})
->unionAll($first)
->get();
如您所见,有一个where()
,其中还有一个whereRaw()
..它是否正确?
结果还可以,我的意思是它完全符合预期..只是我担心性能。你知道,我想我只能通过一个where()
做到这一点。但是目前它也可以运行,但是如果数据集很大,我恐怕它可能会很慢。
无论如何,我的代码好吗?
答案 0 :(得分:0)
在功能方面我没有说什么特别错误,但有些事情你可以清理,例如您正在执行selectRaw,因此您可以为表格添加别名,但您永远不会使用别名。
$first = DB::table('news')
->select(['id', 'title', 'description', 'imgPath'])
->whereRaw("MATCH(title,description) AGAINST(? IN BOOLEAN MODE)");
$results = DB::table('productions')
->select(['id', 'title', 'description', 'imgPath'])
->whereRaw("MATCH(title,description) AGAINST(? IN BOOLEAN MODE)")
->unionAll($first)
->get();
尝试以上操作,如果这不起作用,请尝试使用select语句替换selectRaw语句。
答案 1 :(得分:0)
无需在where()
闭包中添加单个位置。您可以在没有它的情况下编写代码:
$first = DB::table('news')
->selectRaw('"news" as tableName, id, title, description, imgPath')
->whereRaw("MATCH(title,description) AGAINST(? IN BOOLEAN MODE)", array($q));
$results = DB::table('productions')
->selectRaw('"productions" as tableName, id, title, description, imgPath')
->whereRaw("MATCH(title,description) AGAINST(? IN BOOLEAN MODE)", array($q));
->unionAll($first)
->get();
但如果您真的关注数据集变得庞大时的性能,那么我建议您使用paginate()
函数而不是get()