2014-09-01 15 views
5

Ich bin sehr neu in Laravel, derzeit mit Laravel4.Ich versuche, eine mehrspaltige Suchfunktion in meinem Projekt hinzuzufügen.Ich kann einzelne Spalte eloquent Suchabfrage, aber ehrlich gesagt habe ich keine Ahnung wie mehrere Spalte eloquent Suchabfrage in laravel.I haben zwei Drop-Down-MenüLaravel multiple column eloquent Suche

1.Locatiom 2.blood Gruppe zu tun.

Ich möchte ein Benutzer mit bestimmten Blutgruppe gegen bestimmte Lage .Das ist suchen, wählt Benutzer eine Lage und Blutgruppe aus den beiden Dropdown-Menü zu einem Zeitpunkt, und drücken Sie die Suchschaltfläche

In meiner Datenbank, ich habe zwei Spalte enthält man die Lage und andere enthält die Blutgruppe eines bestimmten Benutzers. Nun, was sollte die eloquente Anfrage für eine solche Suche sein?

Antwort

24

einfach verketten where für jedes Feld, das Sie durchsuchen müssen:

// AND 
$results = SomeModel::where('location', $location)->where('blood_group', $bloodGroup)->get(); 

// OR 
$results = SomeModel::where('location', $location)->orWhere('blood_group', $bloodGroup)->get(); 

Sie können es einfacher machen, mit Dank an den Bereichen zu arbeiten:

// SomeModel class 
public function scopeSearchLocation($query, $location) 
{ 
    if ($location) $query->where('location', $location); 
} 

public function scopeSearchBloodGroup($query, $bloodGroup) 
{ 
    if ($bloodGroup) $query->where('blood_group', $bloodGroup); 
} 

// then 
SomeModel::searchBloodGroup($bloodGroup)->searchLocation($location)->get(); 

Nur ein vernünftiges Beispiel einstellen auf deine Bedürfnisse.

+0

vielen Dank, diese Antwort scheint sehr hilfreich .. – RTan

0

Dies ist eine großartige Art und Weise, aber ich, was es gibt einen irgendwo Fehler als Laravel Sie eine nicht-statische Funktion nicht erlauben würde, so dass anstelle von SomeModel::searchBloodGroup($bloodGroup)->searchLocation($location)->get(); Sie einfach SomeModel::BloodGroup($bloodGroup)->Location($location)->get();

nehmen nicht den searchBloodGroup verwenden könnten mit zuzugreifen wurde in BlooGroup geändert, das ist, wie Sie es für alle anderen auch verwenden werden