2012-02-03 2 views
4

CodeIgniter로 작성된 간단한 웹 응용 프로그램을 Symfony2 번들로 이식하고 있습니다. 나는 Symfony2와 Doctrine을 처음 접했고 한 SQL 쿼리에 문제가있어 DQL로 다시 작성하려고합니다. 필자는 모두 번들로 준비했고, Entity 클래스를 만들었고 데이터베이스에 데이터를 삽입하고 Symfony2가 제공하는 객체 지향 프로그래밍 방식으로 간단한 쿼리를 수행 할 수있었습니다.SQL 함수가있는 Doctrine DQL 쿼리

$sql = "SELECT * FROM t WHERE 
UNIX_TIMESTAMP(t.date) > ".(time()-300)." AND 
ROUND(t.x,3) = ".round($x, 3); 

는 데이터베이스 서버에서 실행해야하는 일부 SQL 함수 호출이있다 볼 수 있듯이 : 불행히도, 난 어떻게 DQL이 SQL 쿼리를 구현하는 방법을 모르겠어요. 교리는이 전화를 이해할 수 없습니다. 물론, Doctrine을 사용하지 않고 Symfony2 번들 내에서 기본 PDO를 사용하여이 쿼리를 수행 할 수있는 옵션이 있지만 Symfony2와 Doctrine을 최대한 활용하고 싶습니다.

$em->createQuery("SELECT t FROM MyTestBundle:MyEntity t WHERE t.x = :x") 
->setParameter("x", round($x,3)); 

하지만 내 새로운 번들로 이전 응용 프로그램에서 내 SQL 쿼리를 재 작성 할 수있는이 필수입니다 : 그래서 나는이 OOP 방법이나 뭔가를 이해 영리 DQL 쿼리를 사용하여 수행하고 싶습니다. 제발, 내가 맞는 해결책을 찾도록 도와주세요.

답변

-1

DQL 쿼리에서 SQL 함수를 사용할 수 없습니다. 따라서 두 가지 옵션이 있습니다 :

  1. DQL에서 사용자 정의 함수를 만들 수 있습니다. Doctrine의 공식 문서는 다음과 같습니다. http://docs.doctrine-project.org/en/latest/cookbook/dql-user-defined-functions.html

  2. 또는 직접 doctrine에서 SQL 쿼리를 실행할 수 있습니다. 여기이 지금 당신을 도울 수 있다고 생각하지 않습니다하지만 난 그게 같은 문제가 다른 사람을 도울 수 있기를 바랍니다 질문에 날짜를 기준으로 판단 http://docs.doctrine-project.org/en/latest/reference/native-sql.html

교리 네이티브 SQL을 사용하는 공식 문서입니다

9

는 내가 조금 늦게 충족 알고 있지만이 허용하는 경우 다른 대체 솔루션 찾기 :

사용 번들 : Doctrine Extensions

구성 후

당신의 config.yml :

0123을
doctrine: 
    orm: 
     dql: 
      string_functions: 
       UNIX_TIMESTAMP: DoctrineExtensions\Query\Mysql\UnixTimestamp