doubo4824 2015-07-02 12:35
浏览 122
已采纳

yii2 - 多对多关系的CRUD

I am new to yii. I have tried myself,googled and found that yii2 default CRUD generator Gii will not generate CRUD for tables which has many to many relations. Also found that yii achieves(not in the sense Gii) Many to Many via One to Many yiiDrills .

Now I am trying to emulate the same kind of default CRUD manually with the help of Github issue trail and stackoverflow trail. I am facing the below issues while trying this.

Issue-1 (Model class of the table with Many to Many relations): Not able to initialize the class ActiveDataProvider,

   $query = TableA::find();
   $dataProvider = new ActiveDataProvider([
        'query' => $query->TableB(),
    ]);

Issue-2(View): Even if I were able to initialize it how to render it via GridView

    <?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
  //How to give the column names like we give for one to many
  /* Example */
       'TableA.attr1',
        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>

Also I would like to know if it is desired to create a Model class for the table with Many to Many relations to handle CRUD.

Thanks

  • 写回答

1条回答 默认 最新

  • dongpan1308 2015-07-03 02:24
    关注

    You should create models for all tables.

    Example relations

    /**
    * @return \yii\db\ActiveQuery
    */
    public function getCountry()
    {
      return $this->hasOne(Country::className(), ['id' => 'country_id']);
    }
    
    /**
    * @return \yii\db\ActiveQuery
    */
    public function getCity()
    {
       return $this->hasOne(City::className(), ['id' => 'city_id']);
    }
    

    Example "Search" method

    $query = Tour::find();
    // Important: lets join the query with our previously mentioned relations
    // I do not make any other configuration like aliases or whatever, feel free
    // to investigate that your self
    $query->joinWith(['city', 'country']);
    
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);
    

    You can replace hasOne with hasMany in your case.

    Please check the link http://www.yiiframework.com/wiki/653/displaying-sorting-and-filtering-model-relations-on-a-gridview/

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部