yii2 - 在 Yii2 hasMany 关系中使用 viaTable 应该如何包含列名?
问题描述
在我的示例中,我有模型User
。AUser
有许多组织。一个Organisation
有很多用户。
为了清楚起见,我在此示例中使用了一些稍微不寻常的列名。
表user
有主键列user_a
表organisation
有主键列organisation_a
我们还有一个名为的连接表user_organisation
,其中包含一个主键(此处不相关)以及user_b
列organisation_b
。
如何使用getOrganisations
ahasMany
和 a在 Yii2 中创建用户与其组织的关系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
?
解决方案
当您在 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_organisation
与表的关联方式organisation
。第一列应定义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
列名来代替我们在此处使用的不太标准的示例。
推荐阅读
- java - java.lang.ClassCastException: org.apache.batik.bridge.RhinoInterpreterFactory 与 org.apache.batik.script.InterpreterFactory 不兼容
- session - Redis 会话映射不允许索引
- javascript - 如何在使用 javascript 创建的不同图像中使用不同的 css 样式?
- javascript - 无法在 html 代码中导入 js 代码并使其成为 document.write 东西
- arrays - Excel从另一个数组中找到不在一个数组中的结果
- wordpress - 限制用户在 Wordpress 中提交的帖子的字符长度
- jquery - MVC 选择选项值分配
- javascript - 如何在函数中用 this 指向 React 组件?
- javascript - 为什么我收到未捕获的错误:语法错误,JavaScript 中无法识别的表达式?
- r - 如何将 fitdistrplus::fitdist 摘要转换为整洁的格式?