道歉,因为我是MVC结构的新手(以及框架) .

在使用gii生成我的CRUD之后,我可以修补并获得一个给定的“创建”表单,以显示由相关的一对多表中的选项填充的下拉列表 . 到现在为止还挺好 .

但是,我对如何以同样的方式操纵多对多关系感到困惑 .

假设我有一个genPage表和一个由genPageHasCategories联结表连接的类别表 .

如何获取genPage创建表单以包含由类别表填充的一部分复选框选项? (复选框,而不是下拉列表,因为m-to-m的整个点是允许多选;同样,我想从类别中的“name”字段返回值,因为随机数字ID不太有用在UI中 . )

当然,我期待Yii2神奇地将这些关系保存到GenPageHasCategories联结表中 .

我知道它与viaTable()有关,并怀疑是link()方法,但是我的noob大脑无法弄清楚如何格式化相应的代码片段以及在哪里粘贴它们 . 控制器?模型?视图?每个中的哪一个 - genPage的控制器(或模型),类别或连接表?

我看到gii在GenPage.php模型中有用地创建了以下内容:

公共函数getGenPageHasCategories()
{
return $ this-> hasMany(GenPageHasCategory :: className(),['genPage_idgenPage'=>'idgenPage']);
}

/ **

  • @return \ yii \ db \ ActiveQuery
  • /
    公共函数getCategoryIdcategories()
    {
    return $ this-> hasMany(Category :: className(),['idcategory'=> category_idcategory']) - > viaTable('genPage_has_category'['genPage_idgenPage'=>'idgenPage']);
    }

我试图找到一个方便的扩展或小部件,但似乎没有启动和运行 . (虽然giiant通过视图页面上方便的下拉列表有助于指出这种关系,但它仍然保持连接表的CRUD分离(并且不可理解地使用id而不是人类可读的名称填充它们 . 它还在控制器中生成子集文件夹和模特,甚至进一步混淆了这个菜鸟 . )