Zend Framework: работа с полем типа POINT в MySQL

Работа с типом POINT в MySQL

Я расскажу Вам как на Zend Framework работать с полем типа POINT в MySQL. В этом нет ничего сложного, и сейчас Вы убедитесь в этом сами.

Структуру таблицы возьмем из предыдущей статьи. Для начала нам понадобится модель, в которой мы опишем методы для работы с базой данных.

class Default_Model_DbTable_Geo extends Zend_Db_Table_Abstract {

    protected $_name = 'geo';
    protected $_db;

    public function addGeoPlace($place_name, $coordinates) {
        $data = array(
            'place_name' => $place_name,
            'coordinates' => new Zend_Db_Expr("PointFromText('POINT($coordinates[x] $coordinates[y])')")
        );
        return $this->insert($data);
    }

    public function getGeoLocationById($id) {
        $select = $this->_db->select()
                ->from($this->_name, array(
                    'id',
                    'place_name'
                        )
                )
                ->columns(array(
                    'x(coordinates) coordinates_x',
                    'y(coordinates) coordinates_y'
                ))
                ->where("id = $id");
        $row = $this->_db->fetchRow($select);
        return (!$row) ? null : $row;
    }
}
Как Вы видите, ничего сложного. Для добавления различных выражений в ZF есть замечательный класс Zend_Db_Expr, который позволяет вставлять различные выражения. А вообще ZF сам распознает такие выражения (NOW, LOWER и прочие), если они заключены в скобки.

Ну, а пользоваться этим чудом очень просто.

public function indexAction() {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();

        $geoModel = new Default_Model_DbTable_Geo();
        $coordinates = array(
                "x" => 49.2343503980067,
                "y" => 2.52738212494082
        );
        $geoModel->addGeoPlace("My Favorite Place", $coordinates);
}

Ну вот, таким образом Вы научились заполнять поле типа POINT в Zend Framework.

Stas Kuryan

Web developer. Перфекционист в написании кода.

2 комментария

    • Stafox        Автор

      Да, я уже думал об этом, и в одном проекте так и делал. А тут пришлось хранить множество координат, это в примере — одна точка, а на деле — линии и траектории пути.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *