2016-06-02 2 views
1

DQL에서 고객의 최신 주문을 선택하려는 쿼리를 작성하고 있습니다. 현재는 모든 주문을 받고 내림차순으로 날짜를 기반으로 주문합니다. 즉, 사용자별로 이동하고 최신 항목을 선택하기 위해 필터링해야합니다. 그러나 일반적으로 DQL과 쿼리에 대한 지식은 그리 높지 않습니다. 내 쿼리를 계속하는 방법에 대한 도움을 주시면 감사하겠습니다.DQL : 고객의 마지막 항목 만

public function getLatestOrder($customer){ 
    // get the latest order from a customer 

    $em = $this->getEntityManager(); 

    $q1 = $em->getRepository('AppBundle:Order')->createQueryBuilder('o') 
    ->leftjoin("AppBundle:User", "u") 
    ->where("u.id = :customer_user_id") 
    ->setParameter('customer_user_id', $customer) 
    ->orderBy('o.date', 'DESC'); 

    $q1 = $q1->getQuery(); 
    $res1 = $q1->getResult(); 



    return $res1;  
} 

추가 정보 : 주문 엔티티에는 사용자 정보를 참조하는 고객 열이 있습니다.

+0

을 어떻게 사용에 대한 -> setMaxResluts (1)? http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#first-and-max-result-items-dql-query-only – Petr

+0

고마워요,하지만 난 stille 모든 다른 주문을 가지고 여러 고객이 있습니다. 내가이 쿼리를 확장 할 필요가 있다는 것을 "필터링"하라는 말로부터 알면, 문제는 내가 실제로 어떻게 모르겠다. – KevinTheGreat

+0

시도 -> leftJoin 대신에 참여. LEFT JOIN은 WHERE 클로 우클과 일치하는 사용자가 있는지 여부에 관계없이 모든 주문을 반환합니다. (BTW, 당신은 DQL을 사용하지 않지만 QueryBuilder는) – Petr

답변

0

더 잘 가입하는 대신 하위 쿼리를 사용할 수 있습니다.

0

이 작업을 시도 할 수 있습니다 :

$em->getRepository('AppBundle:Order')->createQueryBuilder('o') 
->leftjoin("AppBundle:User", "u") 
->leftjoin("AppBundle:Order", "laterOrder", 'WITH', 'laterOrder.date > o.date') 
->where("u.id = :customer_user_id") 
->andWhere("laterOrder is null") 
관련 문제