在我的Yii2应用程序中,我有模型
User
,
Group
和
Role
我用一个连接表,
User_Role
用柱子
UserId
RoleId
GroupId
存储模型之间链接的信息。如果
组ID
NULL
,则该角色是全局的,否则它包含用户具有此角色的组的id。
BaseActiveRecord::link/unlink
该机制并不是真正意义上(取消)连接两个以上的模型。链接工作正常,因为
BaseActiveRecord::link
可选择
extraColumns
我可以传递的参数
['GroupId'=> ... ]
. 但是,中没有此参数
BaseActiveRecord::unlink
// class User
// ...
/**
* Internal. Populated temporarily during relational queries.
* @var int|null
*/
public $groupId = null;
/**
* @return ActiveQuery
*/
public function getUserRoles()
{
$link = ['UserId' => 'id'];
if( $this->groupId) $link['GroupId'] = "groupId";
return $this->hasMany(User_Role::class, $link );
}
/**
* Returns the roles of the user, depending on the groupId property.
* @return ActiveQuery
*/
public function getRoles()
{
return $this
->hasMany( Role::class, ['id' => 'RoleId'] )
->via('userRoles', function(ActiveQuery $query){
return $query->andWhere(['GroupId' => $this->groupId]);
});
}
groupId
属性,然后取消链接或执行其他类型的查询。
unlink
方法。但也许有更聪明的多模型链接方式,不需要定制的查询。有什么建议吗?
非常感谢。