Я расскажу Вам как на 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.
Не проще вместо Point юзать просто X и Y ? (:
Да, я уже думал об этом, и в одном проекте так и делал. А тут пришлось хранить множество координат, это в примере — одна точка, а на деле — линии и траектории пути.