代码之家  ›  专栏  ›  技术社区  ›  andrew

一个产品的双亲yii2

  •  0
  • andrew  · 技术社区  · 8 年前

    现在我有两张桌子 "Category" "Product" 。 我做了 'category_id' 在里面 “产品” 平等 'id' 在里面 Category ,所以现在在我看来,它显示了该类别的所有产品。但现在我需要一个产品分为几个类别。

    在controller中,我使用以下数据提供程序:

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

    对如何实现此功能有何建议?

    2 回复  |  直到 8 年前
        1
  •  0
  •   Muhammad Omer Aslam    8 年前

    如果我不理解,你的数据结构就错了

    从1到N ―

     Categories -> Products
    

    现在你希望它来自 N to N 一个有许多产品的类别和一个有许多类别的产品。

    所以我希望您创建另一个名为 Product_Categy 其中您保留了两个表的主键,并且您必须能够从 N到N ,你会有一个这样的最终方案

    Categories (id, ...) -> 
    Categria_Product (id, id_categoria, id_producto, ...) <- Product (id, ..)
    
        2
  •  0
  •   Sriram Jano    8 年前

    尝试以下操作:

    $dataProvider = new ActiveDataProvider([
        'query' => $query = Product::find()->where(['id' => $product_id]),
        'sort'=>array(
            'defaultOrder'=>['id' => SORT_ASC],
        ),
        'pagination' => [
            'pageSize' => 9,
        ],
    ]);
    
    OR
    
    $dataProvider = new ActiveDataProvider([
        'query' => $query = Product::find()->where(['id' => $product_id])->groupBy(['cats->id']),
        'sort'=>array(
            'defaultOrder'=>['id' => SORT_ASC],
        ),
        'pagination' => [
            'pageSize' => 9,
        ],
    ]);