Мы запускаем CakePHP v3.x с базой данных Postgres. Мне нужно выбрать несколько записей, широта и долгота которых находятся на расстоянии X от другой точки. PostGIS имеет функцию, которая делает именно это но кажется, что я должен исправить необработанные запросы SQL, чтобы использовать его.
Я не прошу помощи в написании необработанного запроса, но я ищу подтверждение того, является ли подход необработанного запроса правильным способом использования этого расширения при наилучшем использовании инфраструктуры. Я искал и не нашел никаких библиотек для расширения CakePHP ORM, чтобы включить это. Возможно, есть третий вариант, о котором я не думал.
[ПРИМЕЧАНИЕ: это не работает …]public function fetch()
{
$maxMetersAway = 10 * 1000;
$lat = $this->request->query['lat'];
$lng = $this->request->query['lng'];
$stops = $this->Stops->find('all')
->where("ST_DWithin( POINT($lng,$lat), POINT(Stops.lng,Stops.lat), $maxMetersAway")
->toArray();
$this->set(['stops'=>$stops, '_serialize' => true]);
}
Я получил запрос CakePHP, работающий с этим:
$stops = $this->Stops->find('all')
->where(['ST_DWithin( ST_SetSRID(ST_MakePoint(' . $longitude . ', ' . $latitude . '),4326)::geography, ST_SetSRID(ST_MakePoint(Stops.longitude, Stops.latitude),4326)::geography, ' . $maxMetersAway . ')'])
->toArray();
обновленный: Оригинал не работал с $maxMetersAway
должным образом.
Других решений пока нет …