Wie füge ich einen MySQL-Raumpunkt mit einem YII-Modell ein?

Ich habe einen Modelltyp, der aus einer MySQL-Tabelle generiert wurde, die Adressdaten und auch eine räumliche hatPOINT Feld mit dem Namen "Koordinaten". Wenn ein Modell erstellt oder aktualisiert wird, möchte ich die Adresse geocodieren und die Breiten- und Längengradkoordinaten im speichernPOINT Feld.

Nach meinem Verständnis besteht der Weg dazu darin, die Adresse im Modell zu geocodierenbeforeSave Methode. Ich habe dies getan und habe die Koordinaten in einem assoziativen Array. Meine Frage ist nun, wie ich diese Daten in mein Koordinatenfeld einfügen kann. Das versuche ich:

public function beforeSave()
{
    $singleLineAddress = $this->getSingleLineAddress();
    $coords = Geocoder::getCoordinates($singleLineAddress);

    // WORKS: using the following line works to insert POINT(0 0)
    //$this->coordinates = new CDbExpression("GeomFromText('POINT(0 0)')");

    // DOESN'T WORK: using the following line gives an error
    $this->coordinates = new CDbExpression("GeomFromText('POINT(:lat :lng)')",
        array(':lat' => $coords['lat'], ':lng' => $coords['lng'] ));

    return parent::beforeSave();
}

Wenn ich das tue, erhalte ich den folgenden Fehler:

CDbCommand konnte die SQL-Anweisung nicht ausführen: SQLSTATE [HY093]: Ungültige Parameternummer: Die Anzahl der gebundenen Variablen stimmt nicht mit der Anzahl der Token überein. Die ausgeführte SQL-Anweisung lautete: INSERT INTOplace (city, state, name, street, postal_code, phone, created, coordinates) WERTE (: yp0,: yp1,: yp2,: yp3,: yp4,: yp5, UTC_TIMESTAMP (), GeomFromText ('POINT (: lat: lng)')

Antworten auf die Frage(2)

Ihre Antwort auf die Frage