yii2 activedataprovider 中的多对多关系

安德鲁

我与三个表有多对多关系:Category, Product, ProductCategory关系Category

public function getProductCategories()
{
    return $this->hasMany(ProductCategory::className(), ['category_id' => 'id']);
}

关系Product

    public function getProductCategories()
{
    return $this->hasMany(ProductCategory::ClassName(), ['product_id' => 'id']);
}

而在 ProductCategory

public function getProduct()
{
    return $this->hasOne(Product::className(), ['id' => 'product_id']);
}

public function getCategory()
{
    return $this->hasOne(Category::className(), ['id' => 'category_id']);
}

在我的类别控制器中,我使用此代码根据类别(一对多)显示我需要的产品:

    $cats = Category::findOne(['slug1'=>$slug1]);
    $dataProvider = new ActiveDataProvider([

        'query' => $query = Product::find()->where(['category_id' => $cats->id]),
        'sort'=>array(
            'defaultOrder'=>['id' => SORT_ASC],
        ),
        'pagination' => [
            'pageSize' => 9,
        ],
    ]);

所以问题是如何让我的 ActiveDataProvider 查询多对多关系?

戈卢布

您可以像这样再创建两个关系

在类别中:

public function getProducts()
{
   return $this->hasMany(Product::className(), ['id' =>   'product_id'])->via("productCategories");
}

在产品中:

public function getCategories()
{
  return $this->hasMany(Category::ClassName(), ['id' =>   'category_id'])->via("productCategories");
}

然后你可以像这样使用它

$cats = Category::findOne(['slug1'=>$slug1]);
$dataProvider = new ActiveDataProvider([

    'query' => $query = $cats->getProducts(),
    'sort'=>array(
        'defaultOrder'=>['id' => SORT_ASC],
    ),
    'pagination' => [
        'pageSize' => 9,
    ],
]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章