2012-03-27 3 views
0

을에 예외를 던지는 :는 Doctrine2 내가 아니라 아래 exeption를 뻥하고 Symfony2

[Syntax Error] line 0, col 53: Error: Expected known function, got 'MONTH' 

symfony2에 doctrine2 사용하여 다음 쿼리를 실행하려고 :

SELECT e FROM EntityBundle:Employee e WHERE MONTH(e.dateOfJoining) = 03 order by e.name 

나는 비슷한을 실행하려고 할 때

SELECT * FROM employee e WHERE MONTH(e.date_of_joining) = 03; 

phpmyadmin에서 올바르게 작동합니다. 그래서 누구나 symfony2와 동일한 쿼리 doctrine2를 구현할 수있는 방법을 제안 할 수 있습니까?

답변

2

registering functions with doctrine에 대해이 기사를 읽으십시오. 어쨌든 사용하면 안됩니다. 열의 식을 기반으로 필터링하는 것은 매우 비효율적입니다.

당신은 같은 것을 수행하여 오버 헤드없이 동일하게 달성 할 수 -

SELECT e.* 
FROM employee e 
WHERE e.dateOfJoining BETWEEN '2012-03-01' AND '2012-03-31' 
ORDER BY e.name 

이 쿼리는 dateOfJoining 컬럼에 적용 가능한 인덱스를 사용할 수 있습니다.

+0

데시벨 독립적 훨씬 더, 한 – halfer

+0

감사 nnichols, 내가 ** BETWEEN ** 트릭 원이 아니라 단지 MySQL의 DB에서 추출 된 달 전 일을 처리하고 있지 않다 포트폴리오 일하지 마라. –

+1

항상 일하도록 만들 수 있습니다. 너 정확히 뭘 하려구? – nnichols

0

나는 YEAR()에서 같은 문제가있었습니다. 당신이 config.yml에서 필요로하는 기능을 추가하는 것을 잊지 마세요/솔루션은 플러그인 beberlei (작곡가를 통해) 설치하는 것입니다 교리 2.

에 DoctrineExtensions

> composer require beberlei/DoctrineExtensions "dev-master" 

를 구현되지 않습니다. 뭔가 같은 :

> doctrine: 
>  orm: 
>   dql: 
>    string_functions: 
>     MONTH: DoctrineExtensions\Query\Mysql\Month