Поиск Laravel на нескольких моделях и взаимосвязь нагрузки - оптимизация алгоритма поиска - PullRequest
0 голосов
/ 27 ноября 2018

Я сделал класс поиска для laravel, где мне нужно искать в нескольких моделях, но для конкретных столбцов с подобным.В финале мне нужно вернуть коллекцию моделей, связанных с поисковым термином.Ex.Я ищу марку автомобиля и мне нужно вернуть все машины этой марки.Я должен найти 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));
          }
        }
      }
    }
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...