2011-01-22 4 views
3
좋아

은 좀 더 명확하게하기 : 을 나는 나는 데이터베이스에 그 브랜드의 브랜드와 제품을 많이 가지고 테이블 브랜드 및 제품데이터베이스에서 다음 배열을 얻는 방법은 무엇입니까?

Brand 
    id 
    name 

Product 
    id 
    name 
    brand_id 

doctrine

사용하고 있습니다. 브랜드 목록 (제품 수 + 개) Brand.name의 첫 번째 그룹으로 그룹화했습니다.

ex: 
array( 
    n => array( 
     0 => array('Nike', 4), 
     1 => array('North Pole', 18) 
     ..... 
    ) 
    ..... 
) 

제 질문은 효율적인 방법으로 하나의 쿼리로 수행 할 수 있습니다. 각 brand.name의 첫 번째 후자에 대해 별도의 쿼리를 실행하지 않아도됩니다. Doctrines "Hierarchical Data"는 내 마음을 초월하지만 나는 그것을 다른 것으로 믿는가? 감사합니다

+0

어떤 생각? google =) – simple

+1

[ 'NativeQuery'] (http://www.doctrine-project.org/api/orm/2.0/doctrine/orm/nativequery.html)가 있습니다. 두 테이블을 조인하고 브랜드 그룹을 만들고 제품을 계산하는 SQL 쿼리를 발행하면 어레이를 사후 처리 할 수 ​​있지만 더 좋은 방법이 있어야합니다. – outis

+1

Doctrine 1 또는 2 인 경우 태그/참조를 추가하십시오. – DrColossos

답변

0

그런 식으로는 데이터베이스에서 가져올 수 없지만 데이터를 개체 또는 배열로 가져온 다음 설명 된 형식으로 변환 할 수 있습니다. foreach 루프를 사용하십시오.

0

Doctrine을 사용할 때 객체 대신 원시 SQL 쿼리와 수화 배열을 사용할 수도 있습니다. 그래서 내 솔루션은 네이티브 SQL 쿼리를 사용하는 것입니다 :

SELECT 
    brand.name, 
    count(product.id) 
FROM 
    brand 
JOIN 
    product ON 
    brand.id=product.brand_id 
GROUP BY 
    brand.id ORDER BY brand.name; 

그런 다음 PHP를 반복하여 원하는 배열을 작성하십시오. 결과는 Brand Name으로 정렬되기 때문에 이것은 매우 쉽습니다. 데이터베이스 추상화를 유지하지 않았다면 DQL에서이 쿼리를 표현할 수도 있어야한다고 생각합니다. 객체 대신 배열을 수화하는 것만으로 충분합니다.

1

이 결과 양식을 두 번 이상 사용할 경우 수화기에 서식을 설정하는 것이 유용 할 수 있습니다 (예 : described here). 귀하의 경우에는

, 당신은 3 열

    brand.name의
  1. 첫 글자
  2. brand.name
  3. 수 (product.id)

를 선택 쿼리를 만들 수 있습니다 그런 다음 결과를 수화

$results = $q->execute(array(), 'group_by_first_column'); 
관련 문제