doubo4824 2015-07-02 20: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 10: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/

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

报告相同问题?

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失