2016-04-19 24 views
0

私はLaravel 5.1で電話番号(レコード)と共に企業を検索する検索モジュールを開発しています。Laravel検索ロジックの問題

-- TABLES 
businesses: id, name, status 
records: id, business_id, number, note 

特定のキーワードに対してビジネス名とレコードの両方のメモがある場合は、検索結果を返す必要があります。現時点では、関連付けられたレコード(注釈)が一致しない場合でもすべてのビジネスを返します。

$keywords = explode(" ", Request::get('keywords')); 
$businesses = App\Business; 

$businesses = $businesses->where(function ($query) use ($keywords) { 
    foreach ($keywords as $name) { 
     $query->orWhere('name', 'like', "$name%"); 
    } 
}); 

$businesses = $businesses->with(['records' => function ($query) use ($keywords) { 
    $query->where('note', 'like', '%'.$keywords[0].'%'); 

    foreach ($keywords as $note) { 
     $query->orWhere('note', 'like', "%$note%"); 
    } 
}]); 

$businesses = $businesses->where('status', 1); 
$businesses = $businesses->paginate($limit); 

return $businesses; 
+0

あなたはまっすぐなSQLで何をしようとしていますか?時には、このような複雑なビジネスロジックを壊すのに役立ちます。 – tptcat

+0

@tptcat、SQLの記述方法はありません。照会は単にビジネス上のキーワード - >名前ANDレコード - >を見つけることです。しかし、上記のコードロジックは、レコード - >メモに一致するものが見つからなくても、すべてのビジネスを返します。 –

+0

このパッケージを使用して時間を節約してみましょう。 https://github.com/nicolaslopezj/searchable – Digitlimit

答えて

0

述べたように、彼らはスペースで区切られているので、キーワードを爆発しない - :ここで

はコードがあります。以下を試してください。

$businesses = $businesses->with(['records' => function ($query) use ($keywords) { 
      $query->where('note', 'like', '%'.$keywords.'%'); 
     }])->where('name', 'like', '%'.$keywords.'%')->get();