Заявки за геолокация в Doctrine2

Използвам Doctrine2 и CodeIgniter2 за моето тестово приложение. Имам таблица в моята база данни, която съхранява всички географски местоположения, които имат полета

  1. Име
  2. Географска ширина
  3. Географска дължина
  4. Създаден (клеймо)

Виждам, че операторът на sql чрез формула за хаверсинус за избор на местоположения ще изглежда така

(както е споменато в друг отговор)

SELECT id, 
( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance 
FROM markers 
HAVING distance < 25 
ORDER BY distance 
LIMIT 0 , 20;

Сега ми е трудно да направя това с помощта на създателя на заявки за създаване. Не съм сигурен дали DQL или querybuilder дори поддържа тригонометрични функции. Също така има шансове моят db да бъде мигриран към postgre или да остане с MySql (да, това наистина е болка в гърба), тъй като това решение е извън моя контрол.

Всичко, което ми беше казано, е да използвам методите на доктрината, за да постигна това и следователно db ще стане мащабируем в бъдеще, след като мигрира към някоя от поддържаните от доктрината платформи. Знам, че това е абсурдно. Но наистина ли е възможно да се правят заявки за данни за геолокация, като се използват стойностите за географска ширина и дължина в базата данни?

За разбирането,

Ашок Сринивасан


person Ashok    schedule 08.07.2014    source източник
comment
link от доктрината ясно показва, че платформата на базата данни не трябва да се променя по всяко време. Това е страхотна новина за мен като разработчик. Но все още не мога да намеря приличен урок за прилагане на тригонометричните функции за езика DQL. Всяка помощ ще бъде оценена! Поздрави, Ашок Шринивасан   -  person Ashok    schedule 08.07.2014


Отговори (1)


DQL предоставя само следните функции:

  • коремни мускули
  • CONCAT
  • ТЕКУЩА ДАТА()
  • ТЕКУЩО ВРЕМЕ()
  • CURRENT_TIMESTAMP()
  • LENGTH(низ)
  • НАМЕСТИ (игла, купа сено [, отместване])
  • LOWER(str)
  • MOD(a, b)
  • РАЗМЕР (колекция)
  • SQRT(q)
  • ПОДНИЗ(низ, начало [, дължина])
  • ГОРЕН (низ)
  • DATE_ADD(дата, дни, единица)
  • DATE_SUB(дата, дни, единица)
  • DATE_DIFF(дата1, дата2)

Можете обаче да създадете свои собствени функции (радиани например) Добавяне на ваши собствени функции към езика DQL.

person manix    schedule 09.07.2014
comment
актуализирана връзка DQL потребител Дефинирани функции - person genuinefafa; 20.02.2017