2016-04-19 8 views
0

Ich entwickle ein Suchmodul in Laravel 5.1, die Unternehmen mit ihren Telefonnummern (Aufzeichnungen) sucht.Laravel Suche Logik Problem

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

Die Suche muss Ergebnisse zurückgeben, wenn sowohl Geschäftsname UND Datensätze Hinweis für ein bestimmtes Schlüsselwort gefunden werden. Momentan gibt es alle Geschäfte zurück, selbst wenn die verbundenen Aufzeichnungen (Anmerkung) nicht zusammenpassen. Dabei

ist der Code: -

$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

Können Sie schreiben, was Sie gerade SQL versuchen? Manchmal hilft mir das, komplexe Geschäftslogiken wie diese zu durchbrechen. – tptcat

+0

@tptcat, keine Idee, wie man in SQL schreibt. Die Abfrage besteht einfach darin, Schlüsselwörter zu Firmen-> Name AND records-> note zu finden. Aber die obige Codelogik gibt alle Unternehmen zurück, auch wenn sie in den Records-> Note nicht gefunden werden. –

+0

Warum nicht dieses Paket verwenden und etwas Zeit sparen. https://github.com/nicolaslopezj/searchable – Digitlimit

Antwort

0

Sie nicht die Schlüsselwörter explodieren, weil sie durch Leerzeichen getrennt sind, wie erwähnt. Versuche Folgendes.

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