2017-01-30 2 views
0

Ich habe 7 Datensätze. 6 von ihnen haben selling und 1 ist rent. In Array diese i erhalten:Wie erstellt man eine dynamische Abfrage?

array:2 [▼ 
    0 => "Selling" 
    1 => "Rent" 
] 

Aber wenn ich foreach, dass in Folge erhalten i 4 und 7 nicht Jeden Vorschlag, wie kann ich dieses Problem beheben. Ich versuche, dynamische Abfrage zu erstellen, wenn ich eine weitere Sache eingeben, die ich hier nichts ändern muss.

if(is_array($option)){ 
    foreach($option as $o){ 
     $q->orWhere('name', 'like', $o); 
    } 

    } 
    else{ 
     $q->orWhere('name', 'like', $option); 
    } 
+0

Es sieht aus, als was Sie arbeiten sollten, pro perlig. Es sieht so aus, als ob du 'whereOr' Teile duplizieren könntest, aber in diesem Fall scheint es nicht das Problem zu sein. Wie sieht der Rest Ihrer Anfrage aus? Könnten Sie hinzufügen, was vor und nach dem Beispiel Ihrer Frage passiert? –

Antwort

1

Keine Notwendigkeit für Schleife verwenden whereIn()

if(!is_array($option)){ 
    $option = [$option]; 
} 
$query->whereIn('name', $option)->get(); 
0

Sie können PHP array_unique verwenden, um sicherzustellen, dass es keine doppelten Optionen gibt.

if(is_array($option)) { 
    $option = array_unique($option); // remove any duplicate options 
    foreach($option as $o){ 
     $q->orWhere('name', 'like', $o); 
    } 
} 
else{ 
    $q->orWhere('name', 'like', $option); 
} 
0

Wenn Sie LIKE in Ihrer Abfrage verwenden möchten, wird es besser sein, wie dieser es

if(is_array($option)){ 
    foreach($option as $o){ 
     $q->orWhere('name', 'like', '%'.$o.'%'); 
    } 

    } 
    else{ 
     $q->orWhere('name', 'like', '%'.$option.'%'); 
    } 

sonst zu schreiben wird die genauen Namen suchen

Verwandte Themen