POINT
住所データと「座標」という名前の空間フィールドを持つ mysql テーブルから生成されたモデル タイプがあります。モデルが作成または更新されたら、住所をジオコーディングし、緯度と経度の座標をPOINT
フィールドに保存します。
beforeSave
私の理解では、これを行う方法は、モデルのメソッドで住所をジオコーディングすることです。私はこれを行い、連想配列に座標を持っています。私の質問は、このデータを座標フィールドに挿入するにはどうすればよいですか? これは私がしようとしているものです:
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();
}
これを行うと、次のエラーが表示されます。
CDbCommand は SQL ステートメントの実行に失敗しました: SQLSTATE[HY093]: 無効なパラメーター番号: バインドされた変数の数がトークンの数と一致しません。実行された SQL ステートメント: INSERT INTO
place
(city
,state
,name
,street
,postal_code
,phone
, ) VALUES (:yp0created
,coordinates
:yp1, :yp2, :yp3, :yp4, :yp5, UTC_TIMESTAMP(), GeomFromText('POINT(:lat :lng) )'))