1

내 쿼리는 다음과 같습니다CakePHP의 3 _matching, 어떻게 포맷 결과 데이터

$test = $this->Producers->find() 
    ->hydrate(true) 
    ->select(['Producers.id','Producers.name', 'Products.id', 'Products.name']); 

    $test->matching(
      'Products.Categories', function ($q) { 
       return $q->where(['Categories.id' => 22]); 
    }); 

이 쿼리 자연스럽게 내가 프로듀서가 foreach는 반복 한 후보기에서

|Producers_id|Producers_name|Products_id|Products_name| 
------------------------------------------------------- 
|1   |Canon   |1   |EOS 1000D | 
------------------------------------------------------- 
|1   |Canon   |2   |EOS 300D  | 
------------------------------------------------------- 
|1   |Canon   |3   |EOS 50D  | 
------------------------------------------------------- 
|3   |Nikon   |6   |D600   | 
------------------------------------------------------- 
|3   |Nikon   |7   |D100   | 
------------------------------------------------------- 

과 같은 내부 데이터를 결합하고 반환 사용 각 행의 제품 :

============================= 
Producer: Canon 
----------------------------- 
EOS 1000D 
============================= 
Producer: Canon 
----------------------------- 
EOS 300D 
============================= 
Producer: Canon 
----------------------------- 
EOS 50D 
============================= 

하지만 난이 기대하는 형식의 데이터와 같은 :

============================= 
Producer: Canon 
----------------------------- 
EOS 1000D 
----------------------------- 
EOS 300D 
----------------------------- 
EOS 50D 
============================= 
Producer: Nikon 
----------------------------- 
D600 
----------------------------- 
D100 
============================= 

최상의 데이터 서식 지정 방법은 무엇입니까? 보기 또는 모델/컨트롤러에 있습니까? MapReduce()를 사용할 수 있습니까? Cake\Collection\Collection를 사용

답변

0

모범 사례 여부, 그룹화 할 수 있습니다 결과 :

$collection = new Collection($test); 
$byProducer = $collection->groupBy('Producers_name')->toArray(); 

에서이 될 것입니다 :

[Canon] => Array 
    (
     [0] => Array 
      (
       [Producers_id] => 1 
       [Producers_name] => Canon 
       [Products_id] => 1 
       [Products_name] => EOS 1000D 
      ) 

     [1] => Array 
      (
       [Producers_id] => 1 
       [Producers_name] => Canon 
       [Products_id] => 2 
       [Products_name] => EOS 300D 
      ) ... 
    ) 

[Nikon] => Array 
    (
     [0] => Array 
      (
       [Producers_id] => 3 
       [Producers_name] => Nikon 
       [Products_id] => 6 
       [Products_name] => D600 
      ) ... 
    ) 
+1

'$ test'은 [** 이미 모음입니다 **] (http://book.cakephp.org/3.0/en/orm/query-builder.html#queries-are-collection-objects) (종류). 또한 당신은'name'으로 그룹화해야 할 것입니다. OP에 의해 보여지는 질의와 함께, 결과적인 entites에는'Producers_name'이 없습니다. – ndm

+0

code-kobolt : 위대한 작품, 감사합니다! NDM 당신은 단지에 바로 필요가있다 : '$ byProducer = $ 테스트 -> GROUPBY ('Producers_name') -> toArray();와'; "''케이크 \ 컬렉션 \ 컬렉션을 사용하여"없는' $ collection = 새로운 Collection ($ test);' –