我正在尝试在Laravel中实施搜索。我想搜索模型。
由于数据库中可能有很多记录,我正在尝试chunk
函数。
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
。
答案 0 :(得分:1)
我在阅读了一些关于php closures
的内容后得到了解决方案。我真正担心的是我没有正确使用$results
数组。
但在阅读php docs之后,我知道我正确地做到了这一点。
请注意我知道where
条款,它的用法在这里会更有效率。但这不是我想要问的问题。
答案 1 :(得分:0)
要使用搜索,您可以执行以下操作:
$results = Lead::where('mail','like', $param)->orWhere('name','like', $param)->get();
然后mysql进行搜索,我认为这是一种很好的方式。
取决于搜索应该如何完成:
...where('mail','like', %$param%)...
https://laravel.com/docs/5.1/queries#where-clauses
否则尝试描述搜索的最终目标是什么?