2016-06-09 4 views
0

죄송합니다. 프랑스어로,많은 열을 기준으로 정렬

내 프로젝트에는 Car, Boat, Bike 엔티티가 있으며이 엔티티는 엔티티 Advert에서 호출됩니다. 가격은 자동차, 보트 및 자전거 회사 엔 가격에 따라 주문되므로 Car.price, boat.price 및 bike.price를 내 쿼리의 한 열에 병합해야합니다. 내가 가진 테스트 :

$query->addSelect('CONCAT(c.priceTtc, b.priceTtc, bo.priceTtc, t.priceTtc, p.priceTtc) AS all_price'); 
$query->orderBy('all_price', $order); 

하지만 내 결과 내 엔티티 고라를 반환하지만 핵심 "all_price"

당신이 해결책이 있습니까 0 키를 NULL로 "위해 고라와 배열을 반환하지 "가격에 의한 나의 결과?

나는

+0

merge not merde :). – Alsatian

+0

Doctrine은 광고 엔티티에서 'price_all'을 설정할 수 없으므로 완벽합니다. 배열에 추가합니다. 원하는게 뭐야? 당신은 당신의 질문에 그것을 말하지 않았습니다. 그것을 어떻게 돌려주고 싶은지 우리에게 설명해주십시오. 예상대로 광고 엔티티가되면 all_price 결과는 어디로 가야합니까? – Alsatian

+0

돌아와서 고마워, 나는 내 게시물을 변경했습니다. – Darki666

답변

0

나는 당신이 필요로하는 것 대신에 "CONCAT"의 "연합"생각 차량의 "REGISTRATION_DATE"에 의해 광고 "에 의해 순서"에 대한 동일한 문제가 있습니다. "Concat"은 기본적으로 하나의 행에있는 서로 다른 열의 값을 병합하지만 귀하의 경우별로 도움이되지 않지만 Union은 여러 쿼리의 결과를 함께 병합합니다. 그런 다음 함께 정렬 할 수 있지만 교리를 사용하여 유니온을 사용하는 것은 다소 까다로울 수 있습니다. Native SQL을 사용하십시오.

아마도 다른 쿼리의 결과에 대한 쿼리를 만들기 위해 하위 쿼리를 사용하는 것이 가장 쉬운 솔루션 일 수 있습니다. 여기에 몇 가지 예는 다음과 같습니다

Doctrine 2: how do you use a subquery column (in the SELECT clause)http://melikedev.com/2013/06/07/php-doctrine-dql-select-subquery/

다른 옵션 (내 생각에 가장 좋은 방법은) 당신의 기업 구조를 변경하고 doctrine inheritance (아마 단일 테이블 또는 클래스 표하지만 매핑되지 을 사용하는 것입니다 수퍼 클래스). 예를 들어 보트, 자전거, 자동차의 상위 클래스 인 Vehicle 엔티티를 만들고 여기에 가격과 같은 모든 공통 속성을 넣고 Vehicle을 직접 쿼리하고 모든 결과를 함께 정렬합니다.

다른 대체 솔루션 (권장하지 않음)은 PHP 코드의 여러 엔터티 (자동차, 보트, 자전거)의 서로 다른 쿼리 결과를 병합하고 정렬하는 것입니다.

0

CONCAT을 사용하는 방법과 광고 엔티티 만 검색하는 방법을 모르겠습니다. doctrine을 사용하여 하위 쿼리를 수행 할 수 없습니다.

는하지만 각 필드에 직접 주문하는 것을 제안 :

->orderBy('c.priceTtc',$order) 
->addOrderBy('b.priceTtc',$order) 
->addOrderBy('bo.priceTtc',$order) 
->addOrderBy('t.priceTtc',$order) 
->addOrderBy('p.priceTtc',$order) 

결과는 동일해야합니다.

관련 문제