2016-07-12 2 views
1

카테고리가 있습니다 (카테고리 모델).하나의 요청으로 각 카테고리에 대한 최신 기록 얻기 | Yii2

각 카테고리에는 하위 카테고리가 있습니다 (카테고리 모델 필드 parent_id 통해).

각 하위 카테고리에는 제품 필드 category_id을 통해 제품이 있습니다.

각 상위 카테고리에 대해 최신 추가 제품을 구입해야합니다. 그리고 이상적으로 그것은 하나의 요청을 받아 들여야합니다. 또는 가능한 적은 요청.


나는이 관계를 통해 작동하며 다음과 같은 형태해야한다고 생각 : 예상대로

$areas = Category::find() 
    ->parent() 
    ->published() 
    ->orderBy('position ASC') 
    ->with('latestProduct') 
    ->limit(8) 
    ->asArray() 
    ->all(); 

public function getLatestProduct() 
{ 
    return $this->hasOne(Product::className(), ['category_id' => 'id']) 
     ->viaTable('category', ['parent_id' => 'id']) 
      ->published() 
      ->with('firstImage') 
      ->orderBy('date_create DESC'); 
} 

이 코드 조각이 작동하지 않습니다. 그것이 올바르게 쓰여지고이 유형의 작업을 어떻게 구현해야합니까?

+0

당신은 당신이 다음 제품'처럼 사용할 수 있습니다 product_table 및 firstImage'와 relation'category_table있는 경우는 결과를 – JKLM

+0

를 얻기 위해 쿼리를 작성할 수있는 타임 스탬프를 사용하여 추가 모든 제품은 데이터베이스에 타임 스탬프 열을 추가 할 수 있습니다 .firstImage' 그러면 조건을 추가 할 수 있습니다. –

답변

-1

Category 모델에서 이와 같은 작업을 수행 할 수 있습니다.

public function latestProducts() 
{ 
    return Product::find()->where(['category_id' => $this->id])->published()->with('firstImage')->orderBy('date_create DESC')->all(); 
} 

각 범주에 대해 반복하면서보기에서이 함수를 아래와 같이 호출하십시오.

$category->latestProducts(); // where $category is the current category in loop 
+0

그리고 우리는 루프의 카테고리만큼 많은 요청을합니다. 그것은 적절한 해결책이 아닙니다. 나는 가능한 최소한의 요청으로 그것을하고 싶다. – Alliswell

+0

글쎄, 당신은 원래의 질문에 그렇게 기술적으로 정답을 downvoting 언급이 조금 가혹한 도움을 구하는 사람입니다. – yetanotherse

+0

예, 죄송합니다. 나는 12 시간 제한이 사라지면 downvote를 제거 할 것이다. 나는 그것을 실수로 넣었다. 내 작업에 대한 아이디어가 있습니까? – Alliswell