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 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥15 this signal is connected to multiple drivers怎么解决
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus