Ich habe einige Modelle, die geospatial Felder wie POINT
, POLYGON
oder MULTIPOLYGON
verwenden. Ich möchte meinem Modell sagen, dass ich diese Attribute in einer speziellen Weise verarbeiten soll, damit ich die gewünschten Modellattribute einstellen kann.Laravel-Modell mit POINT/POLYGON usw. mit DB :: rohe Ausdrücke
Beispiel: Jede reguläre Model::find()
oder andere Eloquent-Methode sollte vor dem Speichern oder nach dem Abrufen eines Datenbankwerts einen benutzerdefinierten Code anwenden.
$area->surface
ist ein POLYGON
Feld in MySQL, aber in meiner Modellklasse würde ich gerne $area->surfare
als ein Array von Punkten behandeln.
Unter SELECT
möchte ich daher 1) den Wert mit einem Raw-Ausdruck abrufen, um eine Textdarstellung des Werts zu erhalten, und 2) durch einige benutzerdefinierte PHP-Code, um die WKT-Zeichenfolge in ein Array zu konvertieren.
Auf INSERT/UPDATE
möchte ich den Attributwert (ein Array) und 1) in eine WKT-Zeichenfolge konvertieren, wonach 2) es in die Datenbank mit einer DB-Anweisung geschrieben wird, die den Wert speichert.
Ich möchte dies auf einer Feld-Basis einstellen, nicht als spezielle Get/Set-Funktionen für jedes Feld, und nicht in den Controllern - weil ich viele geospatial Felder habe.
Gibt es einen Weg, dies in Laravel zu erreichen?
(eine abstraktere Version derselben Frage ist, wie ich Code erstellen kann, die Attributwerte für die tatsächlichen SQL-Abfragen manipuliert, anstatt nur einige wertbasierte Manipulation über Mutatoren & Accessoren)
UPDATE: Wenn Sie tiefer in Laravel Doc und API schauen, habe ich festgestellt, dass vielleicht die Eloquent::newQuery()
Methode ist, was ich manipulieren muss? Würde das für irgendeine Abfrage verwendet werden, egal ob SELECT
, INSERT
oder UPDATE
?
Ich habe es gerade versucht und es funktionierte fast wie erwartet bei der Auswahl der Spalte (Rückgabe POLYGON ((98,07 30,12, -98,07 30,53, etc))). Würde es Ihnen etwas ausmachen, wie Sie ein PHP-Array als Eingabe behandelt haben? – daraul