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
を使用することはできません。
あなたの提案は正しいです。しかし、それは私が求めていたものではありません。それは私のせいです;私はその質問で自分自身を明確にしなかった。 SQLクエリに直接変換できない派生フィールドや関連フィールドで検索が実行されているため、where節は使用できません。 – linuxartisan