道歉,因为我不熟悉MVC结构(以及框架)。
使用gii生成我的CRUD之后,我可以修补并获得一个给定的“创建”表单,以显示由相关的一对多表中的选项填充的下拉列表。到目前为止一切都很好。
但是,我对如何以同样的方式操纵多对多关系感到困惑。
假设我有一个genPage表和一个由genPageHasCategories联结表连接的类别表。
如何获取genPage创建表单以包含由类别表填充的一部分复选框选项? (复选框,而不是下拉列表,因为m-to-m的整个点是允许多选;同样,我想从类别中的“name”字段返回值,因为随机数字ID不太有用在UI中。)
当然,我期待Yii2神奇地将这些关系保存到GenPageHasCategories联结表中。
我知道它与viaTable()有关,并且怀疑是link()方法,但我的noob大脑无法弄清楚如何格式化相应的代码片段以及在哪里粘贴它们。控制器?模型?视图?每个中的哪一个 - genPage的控制器(或模型),类别或连接表?
我看到gii在GenPage.php模型中有用地创建了以下内容:
public function getGenPageHasCategories() { return $this->hasMany(GenPageHasCategory::className(), ['genPage_idgenPage' => 'idgenPage']); } /** * @return \yii\db\ActiveQuery */ public function getCategoryIdcategories() { return $this->hasMany(Category::className(), ['idcategory' => category_idcategory'])->viaTable('genPage_has_category' ['genPage_idgenPage' => 'idgenPage']); }
我试图找到一个方便的扩展或小部件,但似乎还没有启动和运行。 (尽管giiant通过在视图页面上方便的下拉列表有助于指出这种关系,但它仍然保持连接表的CRUD分离(并且不可理解地使用id而不是人类可读的名称填充它们。它还生成子集控制器和模型中的文件夹,甚至进一步混淆了这个菜鸟。)