简体   繁体   中英

yii2 - CRUD for Many to Many Relations

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

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/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM