JSON-Suche in laravel eloquent
Ich bin die Speicherung destinations
Feld als json
geben mysql
Beispiel Spalte Wert ["Goa", "Moonar", "Kochi"]
Ich würde gerne alle Zeilen, entspricht goa
als Ziele
Jedoch dieser Zeile die Abfrage liefert das gewünschte Ergebnis
SELECT * FROM `packages`
WHERE JSON_CONTAINS(destinations, '["Goa"]');
Aber was ist das beredte entspricht der obigen Abfrage??
Laravel version 5.3
Modelname :Search
- Im Zusammenhang internals-Vorschlag.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wohl gezwungen, eine teilweise roh Anfrage wie folgt:
use DB;
(Anfang der Datei-definition)DB::table('packages')->whereRaw('json_contains(destinations, \'["Goa"]\')')->get();
Und wenn Sie ein Modell:
Package::whereRaw('json_contains(destinations, \'["' . $keyword . '"]\')')->get();
vorausgesetzt die obige Abfrage kann in SQL.
Goa
mit einer variable wie diese$keyword='goa'
Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 (SQL: select * from
finde_packages`, wo json_contains(Ziele, '["Goa"]')`)
am Endejson_contains
. Noch eine Frage, wie Entferne ich Falle Sensitivität für das keyword??whereraw
immer eine Zeile zurückgibt, wenn die keyword-matches mehr als eine Zeile->selectRaw('...')
oder->select(DB::raw('...'))
where('x', 'like', '%z%')
oder ähnliches zu bekommen, um das problem von Fall-oder vielleicht ist es einfach stackoverflow.com/questions/3936967/...In Laravel 5.6 und höher können Sie whereJsonContains Methode:
Aber nicht alle DB unterstützen: https://laravel.com/docs/5.6/queries#json-where-clauses