2016-10-11 3 views
0

Ich habe eine Tabelle zum Speichern von Ticket-Etiketten erstellt. Ich habe mehrere Labels als Komma (,) separierte Zeichenfolge in Wertspalte gespeichert.Laravel Query Builder im Schlüssel/Wert-Paar

+----+-----------+-------+---------------+---------------------+---------------------+ 
| id | ticket_id | key | value   | created_at   | updated_at   | 
+----+-----------+-------+---------------+---------------------+---------------------+ 
| 9 |  22 | label | Important,Bug | 2016-10-10 14:48:07 | 2016-10-10 14:48:07 | 
| 17 |  21 | label |    | 2016-10-10 16:46:13 | 2016-10-10 16:46:13 | 
+----+-----------+-------+---------------+---------------------+---------------------+ 

Jetzt muss ich die Etiketten suchen und das dazugehörige ticket_id zu bekommen, ist meine Suchbegriffe ein Array

array:1 [ 
    0 => "Important" 
] 

Bitte mir helfen, eine Abfrage

Antwort

1

Sie sollten so etwas versuchen zu schreiben :

$query = Model::where('value','like','%' . $array[0] . '%'); 

for($i = 1; $i < sizeof($array); $i++) { 
    $query->orWhere('value','like','%' . $array[i] . '%'); 
} 

return $query->get(); 

Warning, ist die erste Methode nur where necessar y nach der Version 5.3. Zuvor können Sie direkt mit einer Klausel orWhere beginnen.

Eloquente Bereiche berücksichtigen jetzt die führenden booleschen Einschränkungen für den Bereich. Wenn Sie beispielsweise Ihren Bereich mit einer orWhere-Einschränkung starten, wird er nicht mehr in den normalen Bereich konvertiert. Wenn Sie sich auf diese Funktion verlassen (z. B. mehrere oderWhere Einschränkungen innerhalb einer Schleife hinzufügen), , sollten Sie sicherstellen, dass die erste Bedingung eine normale ist, wo alle Booleschen Logik-Probleme zu vermeiden.

+0

Vielen Dank für Ihre Antwort, aber es ist zwei Zeilenwert zu geben, aber es sollte nur eine roh geben. –

0
$filter = new Filter(); 
$query = $filter->where('key', 'label') 
       ->where(function($query) use($labels) { 
        for ($i = 0; $i < count($labels); $i++) { 
         $query->orWhere('value', 'LIKE', '%' . $labels[$i] . '%'); 
        } 
       }) 
       ->get(); 

return $query;