我为laravel创建了一个搜索类,该类需要在多个模型中进行搜索,但需要搜索具有like的特定列。最后,我需要返回与搜索词相关的模型的集合。例如我搜索一个汽车品牌,我需要退还该品牌生产的所有汽车。我必须搜索6种不同的模型,这些模型都与考试模型有关,并且某些模型与考试有两种关系。而且我也做了搜索词建议部分,它只需要显示至少与之相关的词。如何加快我的代码?
public function search($obj, $tags, $path)
{
$query = $obj::select('*');
foreach ($tags as $tag) {
$query->orWhere($tag, 'LIKE', '%' . $this->term . '%');
}
$query = $query->get();
foreach ($path as $pat) {
if($pat!="")
$tmp = $query->load([$pat => function ($q) use (&$exams) { $exams = $q->get(); }]);
else
$exams = $query;
if($exams && $exams->count() > 0)
{
$this->hits++;
if(!$this->onlySuggestions) {
$this->res = $this->res->merge($exams);
}
else {
foreach ($tags as $tag) {
if($tag!="created_at") {
$temp = $query;
$temp = $temp->filter(function ($item) use ($tag){
return false !== stristr($item->{$tag}, $this->term);
});
$this->res = $this->res->merge($temp->pluck($tag));
}
}
}
}
}
}