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

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

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

Структуру таблицы возьмем из предыдущей статьи. Для начала нам понадобится модель, в которой мы опишем методы для работы с базой данных.
[php title=»models/DbTable/Geo.php»] 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;
}
}
[/php] Как Вы видите, ничего сложного. Для добавления различных выражений в ZF есть замечательный класс Zend_Db_Expr, который позволяет вставлять различные выражения. А вообще ZF сам распознает такие выражения (NOW, LOWER и прочие), если они заключены в скобки.

Ну, а пользоваться этим чудом очень просто.
[php title=»IndexController.php»] 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);
}
[/php]

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

Stas Kuryan

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

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

  1. Suvitruf     

    Не проще вместо Point юзать просто X и Y ? (:

    • Stafox        Автор

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

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

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