Я сделал JSON поисковую систему для наших API.
Лог c для сборки запросов выглядит следующим образом:
Laravel макрос сделано для включения метода поиска в моделях Eloquent, который создает экземпляр класса и запускает метод поиска:
/**
* @var $this Builder
*/
$searcher = new Searcher($this, $request);
$searcher->search();
Чтобы все было разделено, классы параметров запроса, которые имеют URL-запросы logi c, создаются динамически и иметь тот же конструктор запросов в качестве зависимости. Внутри foreach l oop выполняется следующее:
new $parameter($this->request, $this->builder, $this->modelConfig);
Чтобы увидеть, что на самом деле искалось, я установил журнал для записи фактического запроса и привязок
Log::info('[Search] SQL: ' . $this->builder->toSql() . " Bindings: " . implode(', ', $this->builder->getBindings()));
Теперь проблема, с которой я столкнулся, заключается в том, что при загрузке связанных моделей (используя ->with()
в одном из параметров запроса (RelationsParameter
), я получаю то, что я просил, поэтому модель загружается вместе с переданными ей отношениями, однако это никогда не отражается в запросе.
Я всегда получаю SELECT * FROM table WHERE something
без упоминания связанной таблицы. Есть ли способ получить и базовый запрос?