代码之家  ›  专栏  ›  技术社区  ›  Panyasan

Yii2 ActiveRecord链接/取消多个型号的链接

  •  0
  • Panyasan  · 技术社区  · 7 年前

    在我的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 方法。但也许有更聪明的多模型链接方式,不需要定制的查询。有什么建议吗?

    非常感谢。

    0 回复  |  直到 7 年前
    推荐文章