Я пытаюсь реализовать поиск в Laravel. Я хочу искать на моделях. Поскольку в базе данных может быть много записей, я пытаюсь использовать функцию chunk
.Laravel: Внешняя переменная в обратном вызове для куска
public function searchLeads($param)
{
$results = array();
// get all leads
Lead::chunk(100, function($leads) use ($results, $param) {
// search in name
$results = array_merge($results, $this->repository->searchInName($leads, $param));
// search in email
$results = array_merge($results, $this->repository->searchInEmail($leads, $param));
// and so on ...
}
// eliminate duplicates
$collection = collect($results);
$collection = $collection->unique();
$results = $collection->all();
dd($results);
// return $results;
}
Примечание: searchIn...
функции возвращают массив результатов и работают, как ожидалось.
Когда я пытаюсь выполнить приведенный выше код, я получаю пустой массив. Поэтому я изменил следующую строку (добавлена ссылка &
на номер $results
).
Lead::chunk(100, function($leads) use (&$results, $param) {
Теперь я получаю ожидаемый результат.
вопрос есть, я наткнулся на правильное решение, или мне не хватает чего-то, что может привести к ошибкам в коде?
Примечание: Я знаю, используя where clause
- лучший и эффективный способ; но для этого я не могу использовать where
.
Что вы предлагаете правильно. Но это не то, что я хотел спросить. Это моя вина; Я не уточнил себя в вопросе. Я не могу использовать where clauses, поскольку поиск выполняется по производным и связанным с ним полям, которые не могут быть напрямую преобразованы в SQL-запрос. – linuxartisan