在Yii2中,使用viaTable有许多关系,如何包含列名?
在我的示例中,我有一个模型在Yii2中,使用viaTable有许多关系,如何包含列名?,yii2,Yii2,在我的示例中,我有一个模型User。用户有许多组织。一个组织有许多用户 为了清楚起见,我在本例中使用了一些稍微不寻常的列名 user表具有主键列user\u a organization表具有主键列organization\u a 我们还有一个名为user\u organization的联接表,其中包含一个主键(此处不相关)加上user\u b和organization\u b列 如何使用getorganizationsahasMany和viaTable在Yii2中创建用户与其组织之间的关系 g
User
。用户有许多组织。一个组织
有许多用户
为了清楚起见,我在本例中使用了一些稍微不寻常的列名
user
表具有主键列user\u a
organization
表具有主键列organization\u a
我们还有一个名为user\u organization
的联接表,其中包含一个主键(此处不相关)加上user\u b
和organization\u b
列
如何使用getorganizations
ahasMany
和viaTable
在Yii2中创建用户与其组织之间的关系
getorganizations()公共职能
{
返回$this->hasMany(Organization::className(),['column\u a'=>'column\u b']))
->viaTable('用户组织',['列c'=>'列d']);
}
我应该用什么来替换列a
,列b
,列c
,列d
?当您在Yii2中创建一个更简单的关系时,您可以从以下内容开始
在这里,我们有一个单一组织的用户。user
表中有一列organization\u b
,organization
表中有一列organization\u a
在我们的关系中,我们使用组织列organization\u a
定义这些列,然后是用户表列organization\u b
getorganization()公共职能
{
返回$this->hasOne(organization::className(),['organization\u a'=>'organization\u b']);
}
如果我们有一个关系,那么定义列的方式会有一些变化。我们也需要考虑链接表。
我们的关系定义中的有许多部分现在包含链接表用户组织
与组织
表的关系。第一列应定义组织
表中存在的内容。对我们来说,这就是组织。第二列是组织的用户组织
表中的相关列。对我们来说,这就是组织
新的viaTable
部分关系现在将个人
表链接到链接表用户组织
。第一列应定义用户组织
表中存在的内容。对我们来说,这就是user\u b
。第二列是user
表中的相关列。对我们来说,这是user\u b
getorganizations()公共职能
{
return$this->hasMany(organization::className(),['organization\u a'=>'organization\u b']
->viaTable('user_Organization',['user_b'=>'user_a']);
}
在更多的标准示例中,您可能会使用大量id
列名来代替我们在这里使用的不太标准的示例。这一点解释得很好(而且我更清楚)在文档中:缺少明显的列命名和映射的文档中的一个明显的例子,或者在任何其他地方我都可以发现是诚实的,这正是我创建这个问题的原因。如果您认为文档不清楚,您可以考虑用改进来打开PR。但是我认为像'user\u b'=>'user\u a'
这样的映射示例比'order\u id'=>'id'
更令人困惑。感谢您的反馈