在Yii2中,有许多使用viaTable的关系应该如何包含列名?

时间:2018-07-19 10:56:28

标签: yii2

在我的示例中,我有模型UserUser有许多组织。 Organisation有许多用户。

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

user表具有主键列user_a organisation表具有主键列organisation_a

我们还有一个名为user_organisation的联接表,其中包含一个主键(此处不相关)以及user_borganisation_b列。

如何使用getOrganisationshasManyviaTable在Yii2中创建用户与其组织之间的关系?

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

我应该将column_acolumn_bcolumn_ccolumn_d替换为什么?

1 个答案:

答案 0 :(得分:0)

在Yii2中创建更简单的关系时,您可能会从以下内容开始。

在这里,我们有一个拥有单个组织的用户。 user表具有列organisation_b,而organisation表具有列organisation_a

在我们的关系中,我们用组织列organisation_a和用户表列organisation_b定义这些列。

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

在具有hasMany关系的情况下,定义列的方式略有变化。我们也需要考虑链接表。

我们的关系定义的hasMany部分现在包含链接表user_organisationorganisation表的关系。第一列应定义organisation表中存在的内容。对我们来说,organisation_a。第二列是组织在user_organisation表中的相关列。对我们来说是organisation_b

我们关系中新的viaTable部分现在将individual表链接到链接表user_organisation。第一列应定义user_organisation表中存在的内容。对我们来说,user_b。第二列是user表中的相关列。对我们来说,user_b

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

在更标准的示例中,您可能会使用许多id列名来代替此处使用的较不标准的示例。