IT박스

Doctrine을 사용하여 여러 열로 정렬

itboxs 2020. 8. 13. 08:05
반응형

Doctrine을 사용하여 여러 열로 정렬


두 개의 열로 데이터를 정렬해야합니다 (행에 열 번호 1에 대해 다른 값이있는 경우 순서대로, 그렇지 않으면 열 번호 2로 정렬)

내가 사용하고 QueryBuilder쿼리를 만들 수 있습니다.

orderBy메서드를 두 번 호출하면 이전에 지정된 순서를 대체합니다.

첫 번째 매개 변수로 두 개의 열을 전달할 수 있습니다.

->orderBy('r.firstColumn, r.secondColumn', 'DESC');

그러나 두 번째 매개 변수에 대해 두 개의 순서 지정 방향을 전달할 수 없으므로이 쿼리를 실행할 때 첫 번째 열은 오름차순으로 정렬되고 두 번째 열은 내림차순으로 정렬됩니다. 둘 다 내림차순을 사용하고 싶습니다.

이것을 사용하는 방법이 QueryBuilder있습니까? DQL을 사용해야합니까?


열 이름 바로 뒤에 주문 방향을 추가해야합니다.

$qb->orderBy('column1 ASC, column2 DESC');

앞서 언급했듯이 여러 호출은 orderBy 누적되지 않지만 다음을 여러 번 호출 할 수 있습니다 addOrderBy.

$qb->addOrderBy('column1', 'ASC')
   ->addOrderBy('column2', 'DESC');

Doctrine 2.x에서는 위의 예와 같이 'orderBy'또는 'addOrderBy'교리를 사용하여 여러 주문을 전달할 수 없습니다. 왜냐하면 'orderBy'함수에서와 같이 두 번째 매개 변수를 비워두면 마지막 열 이름 끝에 'ASC'가 자동으로 추가되기 때문입니다.

예를 들어 ->orderBy('a.fist_name ASC, a.last_name ASC')'ORDER BY first_name ASC, last_name ASC ASC'와 같은 SQL을 출력합니다. 그래서 이것은 SQL 구문 오류입니다. orderBy 또는 addOrderBy의 기본값이 'ASC'이기 때문입니다.

여러 주문을 추가하려면 '추가'기능을 사용해야합니다. 그리고 그것은 이렇게 될 것입니다.

->add('orderBy','first_name ASC, last_name ASC'). 이렇게하면 올바른 형식의 SQL이 제공됩니다.

add () 함수에 대한 자세한 정보. https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/query-builder.html#low-level-api

도움이 되었기를 바랍니다. 건배!


당신이 사용할 수있는 ->addOrderBy($sort, $order)

추가 : Doctrine Querybuilder btw. 종종 정상적인 방법의 "특별한"수정 사용을 참조하십시오 select-addSelect, where-andWhere-orWhere, groupBy-addgroupBy...


orderBy소스 코드 메모에 대한 주석 : Keys are field and values are the order, being either ASC or DESC.. 그래서 당신은 할 수 있습니다 orderBy->(['field' => Criteria::ASC]).

참고 URL : https://stackoverflow.com/questions/11575325/order-by-multiple-columns-with-doctrine

반응형