Jak wstawić punkt przestrzenny mysql za pomocą modelu yii?
Mam typ modelu, który został wygenerowany z tabeli mysql, która ma dane adresowe, a także przestrzennePOINT
pole o nazwie „współrzędne”. Kiedy model jest tworzony lub aktualizowany, chcę geokodować adres i zapisać współrzędne szerokości i długości geograficznej wPOINT
pole.
Rozumiem, że sposobem na to jest geokodowanie adresu w modelubeforeSave
metoda. Zrobiłem to i mam współrzędne w tablicy asocjacyjnej. Teraz moje pytanie brzmi: jak mogę umieścić te dane w moim polu współrzędnych? Oto, co próbuję:
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();
}
Gdy to zrobię, pojawia się następujący błąd:
CDbCommand nie może wykonać instrukcji SQL: SQLSTATE [HY093]: Niepoprawny numer parametru: liczba powiązanych zmiennych nie odpowiada liczbie tokenów. Wykonana instrukcja SQL: INSERT INTOplace
(city
, state
, name
, street
, postal_code
, phone
, created
, coordinates
) VALUES (: yp0,: yp1,: yp2,: yp3,: yp4,: yp5, UTC_TIMESTAMP (), GeomFromText ('POINT (: lat: lng)'))