在Yii2中,我如何将多对多关系纳入到crud中

时间:2015-02-01 19:58:43

标签: many-to-many yii2 gii

道歉,因为我不熟悉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而不是人类可读的名称填充它们。它还生成子集控制器和模型中的文件夹,甚至进一步混淆了这个菜鸟。)

0 个答案:

没有答案