我是yii的新手。我自己也尝试过,谷歌搜索发现yii2默认积垢生成器Gii不会为具有多对多关系的表生成积垢。还发现yii通过一对多YiIdRill实现多对多(不是Gii意义上的)。
现在我正试图在Github issue trail和stackoverflow trail的帮助下手动模拟相同类型的默认CRUD。我在尝试这个过程中面临以下问题。
问题1(具有多对多关系的表的模型类):无法初始化类ActiveDataProvider,
$query = TableA::find();
$dataProvider = new ActiveDataProvider([
'query' => $query->TableB(),
]);
问题2(视图):即使我能够初始化它,如何通过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'],
],
]); ?>
另外,我还想知道是否需要为表创建一个模型类,该表具有多对多关系来处理CRUD。
谢谢
您应该为所有表创建模型。
实例关系
/**
* @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']);
}
示例”搜索”方法
$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,
]);
在您的情况下,您可以将hasOne替换为has很多。
请检查链接http://www.yiiframework.com/wiki/653/displaying-sorting-and-filtering-model-relations-on-a-gridview/