代码之家  ›  专栏  ›  技术社区  ›  Harry B Cybernetic

在Yii2中,使用viaTable有很多关系,如何包含列名?

  •  0
  • Harry B Cybernetic  · 技术社区  · 7 年前

    在我的例子中,我有一个模型 User A. 使用者 有许多组织。一 Organisation 有很多用户。

    为了清楚起见,我在这个例子中使用了一些稍微不寻常的列名。

    这个 user 表中有主键列 user_a 这个 organisation 表中有主键列 organisation_a

    我们还有一个连接表,名为 user_organisation 其中包含主键(此处不相关)和 user_b organisation_b 柱。

    如何使用 getOrganisations A. hasMany 还有 viaTable ?

    public function getOrganisations()
    {
        return $this->hasMany(Organisation::className(), ['column_a' => 'column_b'])
        ->viaTable('user_organisation', ['column_c' => 'column_d']);
    } 
    

    我应该替换什么 column_a , column_b , column_c , column_d 具有

    1 回复  |  直到 7 年前
        1
  •  0
  •   Harry B Cybernetic    7 年前

    当你在Yii2中创建一个更简单的关系时,你可以从以下内容开始。

    这里我们有一个单一组织的用户。这个 user 表中有列 organisation_b 还有 organisation 表中有列 organisation_a .

    在我们的关系中,我们将这些栏目定义为“组织”栏目 组织 然后是用户表列 组织机构 .

    public function getOrganisation()
    {
        return $this->hasOne(Organisation::className(), ['organisation_a' => 'organisation_b']);
    }
    

    我们有一个 hasMany 关系我们定义列的方式发生了一些变化。我们也需要考虑链接表。

    这个 有很多 我们关系定义的一部分现在包含了链接表 user_organisation 组织 桌子第一列应该定义 组织 桌子对我们来说这是 组织 .第二列为 用户组织 该组织的表格。对我们来说这是 组织机构 .

    新的 viaTable 现在,我们的部分关系将 individual 表到链接表 用户组织 .第一列应定义 用户组织 桌子对我们来说这是 user_b .第二列为 使用者 桌子对我们来说这是 用户_b

    public function getOrganisations()
    {
        return $this->hasMany(Organisation::className(), ['organisation_a' => 'organisation_b'])
            ->viaTable('user_organisation', ['user_b' => 'user_a']);
    } 
    

    在更标准的示例中,您可能会使用很多 id 列名代替我们在这里使用的不太标准的示例。