2013-08-24 4 views
0

데이터베이스의 일부 tsks를 검색하고 필드에서 이진 연산으로 정렬해야합니다. 여기 내가 원하는 것입니다 :Symfony 2/Doctrine 2, BIT_AND 연산자를 사용하는 ORDER BY

$query = $this->getEntityManager()->createQueryBuilder() 
        ->select('t') 
        ->from('MyBundle:Task', 't'); 
    $query->orderBy('BIT_AND(t.options, 1)', 'DESC'); 

나는 각 "옵션"에 대한 하나 개의 필드를 갖고 싶어하지 않기 때문에 내 모든 옵션은 "비트"필드에 있습니다.

이전 코드는 작동하지 않습니다. 내가 할 시도했다 :

$query = $this->getEntityManager()->createQueryBuilder() 
        ->select('t', 'BIT_AND(t.options, 1) as myoption') 
        ->from('MyBundle:Task', 't'); 
    $query->orderBy('myoption', 'DESC'); 

을하지만 내 작업이 사용자에게 관련이 경우, 나는 관계 ...의 개체를 잃어버린거야, 나는 $를 task-> 인 getUser (하고 싶은) (또는 더 정확하게 나뭇 가지 : task.user)

내 질문은 : - 이진 연산자에서 내 데이터를 정렬하려면 어떻게해야합니까? - 여러 항목을 선택하면 개체가 올바르게 수분을 유지할 수 있습니까?

감사합니다.

+0

매개 변수를 정렬에 기능을 적용하여 많은 경험을하지 마십시오 그러나 그것은 작동 할 수 있습니다. a.options는 t.options이어야합니까? 교리 매뉴얼은 SELECT, WHERE 및 HAVING 절에서만 함수가 지원된다는 것을 암시하는 것 같습니다. 따라서 두 번째 접근 방법은 아마도 갈 길입니다. 생성 된 SQL을 에코하여 얻은 것을 확인하십시오. – Cerad

+0

당신이'= '을 (를) 주문한 것으로 이해하지 못합니까? – AdrienBrault

+0

실제 쿼리를 간소화 했으므로 오류가 있습니다. 그러나 내 쿼리에서 테이블 이름이 좋습니다! – Pixel166

답변

0

해결책을 찾았습니다. 그것은 교리에 일하고

$query = $this->getEntityManager()->createQueryBuilder() 
       ->select('t') 
       ->addSelect('BIT_AND(t.options, 1) AS HIDDEN option') 
       ->from('MyBundle:Task', 't'); 
$query->orderBy('option', 'DESC'); 

2.2