在一个请求中获取每个类别的最新记录| Yii2

时间:2016-07-12 10:39:20

标签: php activerecord 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');
}

这段代码没有按预期工作。它是否正确写入以及我应该如何实现这种类型的任务?

1 个答案:

答案 0 :(得分:-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