Yii从孙子到grandFather的关系

时间:2016-04-20 12:12:10

标签: yii

我有以下方案: enter image description here

我可以将公司与用户和用户连接到公司吗?说连接我的意思是用户模型中的关系,它将返回当前用户的特定角色的所有公司和所有分支。

谢谢

1 个答案:

答案 0 :(得分:0)

您应该能够使用Yii(或任何现代MVC框架)来实现这一目标。

确保您在各自的模型类中定义了关系(代码假定您使用的是Yii 1)。

Class User extends CActiveRecord
{
  ...
  public function relations(){
    return array(
      'role' => array(self::BELONGS_TO, 'Roles', 'user_id'),
    );
  }
  ...
}

在您的其他课程中定义适当的关系,您应该能够像这样访问它们......

// Defined relation is BELONGS_TO
$belongsToModel = $model->definedRelation;

// Defined relation is HAS_MANY
$arrayOfCActiveRecords = $model->definedRelation;

如果定义的关系是HAS_MANY,您可以迭代数组并访问各个记录。

更新
根据你的评论,做你想做的唯一简单方法是给你的角色一个branch_id(并确保你的分支有一个company_id)。如果特定角色对于多个分支是通用的,那么您当然可以给它们相同的描述,但是在数据库中它们需要彼此区分,因为它们实际上是不同的角色。

由于您无法将role_id分配给用户,也无法将user_id分配给角色,因此您必须创建一个关联表来加入它们(如果您愿意,可以为其创建模型;访问this thread在Yii论坛获取更多信息)。

一旦你这样做,将用户连接到公司应该是这样的......

// in your User model...
private $_roles = array();

public function getRoles(){
    if(isset($this) && get_class($this) == __CLASS__){
        $query = "select * from users_roles where user_id = {$this->id}";
        $this->_roles = Yii::app()->db->createCommand($query)->queryAll();
    }
    return $this->_roles;
}

现在你应该能够调用$roles = $user->roles并迭代角色,获得分支然后获得公司。