2014-04-17 6 views
0

Doctrine QueryBuilder로 "간단한"쿼리를 작성하는 데 문제가 있습니다. 나는 최대 10km에있는 "사람"을 얻으려고 노력한다.Doctrine, QueryBuilder : 괄호와 함께 "where"를 사용하십시오.

내 쿼리 :

$QB = $this->createQueryBuilder('p'); 
    $QB->add('select', 'p') 
      ->add('from', 'MyProject\Bundle\FrontBundle\Entity\Pro p') 
      ->where('p.job = :job') 
      ->andWhere('(3956 * 2 * ASIN(SQRT(POWER(SIN((:latitude - abs(pro.latitude)) * pi()/180/2),2) + COS(:latitude * pi()/180) * COS(abs(pro.latitude) * pi()/180) * POWER(SIN((:longitude - pro.longitude) * pi()/180/2), 2)))) <= 10') 
      ->addOrderBy('p.dateCreation', 'DESC') 
      ->addOrderBy('p.id', 'DESC') 
      ->setParameter('latitude', $latitude) 
      ->setParameter('longitude', $longitude) 
      ->setParameter('job', $jobId); 

문제는 두 번째 '여기서'문에, 교리 때문에 다음 괄호의 "ASIN"에 실패합니다. 함수를 실행하려고합니다 ... 탈출 할 방법이 있습니까? 또는이 조건을 구성하는 또 다른 방법은 무엇입니까? 전문 교리

감사합니다, 만약 내가 제대로 이해)

답변

1

, 당신은 그것을위한 원시 SQL 쿼리를 작성하거나 교리에서 함수 ASIN (또는 다른)를 구현 할 수 있습니다. 사용자 정의 DQL 기능에 대해

https://github.com/wiredmedia/doctrine-extensions/blob/master/lib/DoctrineExtensions/Query/Mysql/Asin.php

그리고 및 기사 : 당신은 그것의 ASIN 기능의 구현을 사용할 수 있습니다

https://github.com/wiredmedia/doctrine-extensions

: 여기

당신이 도움이 될 번들이

http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html

+0

그래서 구현해야합니다 : ASIN, SQRT, POWER, SIN, ABS, PI, COS ... 젠장 ... – Doubidou

+0

내가 말했듯이 (또는 쓴), 당신은 단지 언급 된 번들을 프로젝트에 추가해야합니다. DQL 함수는 이미 https://github.com/wiredmedia/doctrine-extensions#including-doctrine 확장에 나열된대로 구현됩니다. –

관련 문제