3

POINT空間フィールドを持つ mysql テーブルに基づく yii モデルがあります。このモデルのレコードを表示するときに、座標を「55.0000、-89.5000」の形式で表示したいと考えています。デフォルトで生成された CRUD ビューでは、現在、このフィールドには何も表示されません。

AsText何らかの方法で mysql 関数を使用する必要があると考えていbeforeFind()ます。

これどうやってするの?

アップデート

次を使用して、「POINT(55.0000, -89.5000)」として出力する値を取得できることがわかりました。

public function beforeFind()
{
    parent::beforeFind();

    $criteria = new CDbCriteria();
    $criteria->select = "AsText(coordinates) AS coordinates";
    $this->dbCriteria->mergeWith($criteria);
}

ただし、これには、他のすべてのフィールドが「未設定」になるという不幸な副作用があります。

4

1 に答える 1

2

$criteria->selectのデフォルト値はだと思います"*"。設定$criteria->select = "AsText(coordinates) AS coordinates"することで、 * を上書きしていたため、単一の列のみが返されました。だから私がしたことは、座標列に加えて他の列を手動で指定するように行を変更することでした:

$criteria->select = "id,name,street,city,AsText(coordinates) AS coordinates";

これが理想的な方法かどうかはわかりませんが、私にとってはうまくいっています。これは、選択で他のデータベース関数を使用するために必要なのと同じことだと思います。

于 2012-09-22T01:22:56.220 に答える