2012-07-05 7 views
0

나는 Symfony2와 함께 일하고있다.이 DQL 쿼리가 맞습니까?

엔티티 직원과 엔티티 OneToMany 연관과 관련된 메시지가 있습니다.

그래서 직원은 몇 가지 메시지를 가질 수 있으며 주어진 직원에게 가장 최근에 보낸 메시지를 갖고 싶습니다.

이 쿼리가 정확합니까?

<?php 
    public function getLast($id_employee) 
    { 
    $query = $this->_em->createQuery(
       'SELECT MAX(m.sentAt) FROM MyBundle:Message m JOIN m.employee e 
        WHERE e.id = ' . $id_employee); 
    return $query->getSingleResult(); 
    }  

덕분에 많은

답변

1

우리는 메시지 만에 한 사용자 속한 생각 할 수 있기 때문에 외부 키가 message 테이블에 alredy하고 있기 때문에 당신은 JOIN을 수행 할 필요가있다 한 사용자는 그와 관련된 여러 메시지를 가질 수 있습니다.

그래서 쿼리는

'SELECT MAX(m.sentAt), m.text 
FROM MyBundle:Message m 
WHERE m.employee_id = :id_employee' 

될 것입니다 당신이해야 할 일을했을 경우는

$query = $this->_em->createQuery(
       'SELECT MAX(m.sentAt),m.text 
       FROM MyBundle:Message m 
       WHERE m.employee_id = :id_employee') 
       ->setParameter('id_employee',$employee_id) 
       return $query->getSingleResult(); 

그러나 그런 식으로 코드를 수정해야 조인,이 중요한 일을 기억하시기 바랍니다

  1. 엔티티가 연관과 관련이 있고 오직 ON 조건 만 키에 관한 것이면 ->leftJoin(..), ->where(..)
같은
  • 교리는 당신에게 직접 DQL 사용하지 않고 이러한 유형의 쿼리를 수행하기위한 "빠른"방법을 제공 WHERE 절을 지정 (또는 조금 밖에 사용) 사용이 뭔가