1

抱歉,因为我是 MVC 结构(和框架,就此而言)的新手。

在使用 gii 生成我的 CRUD 后,我可以修改并获得给定的“创建”表单,以显示由相关一对多表中的选项填充的下拉列表。到目前为止,一切都很好。

但是,我对如何以同样的方式处理多对多关系感到困惑。

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

如何让 genPage 创建表单包含由类别表填充的复选框选项部分?(复选框,而不是下拉菜单,因为 m-to-m 的全部意义在于允许多选;另外,我想从类别中的“名称”字段返回值,因为随机数字 id 不太有用在用户界面中。)

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

我知道它与 viaTable() 和怀疑 link() 方法有关,但我的菜鸟大脑无法弄清楚如何格式化适当的代码片段以及将它们粘贴在哪里。控制器?模型?看法?以及每个控制器(或模型)中的哪一个——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而不是人类可读的名称填充它们。它还在控制器中生成子文件夹和模型,进一步混淆了这个菜鸟。)

4

0 回答 0