yii2多对多查询

4 篇文章 0 订阅

三张表,文章表,权限表,用户表

article文章表字段:id,name,content

permission权限表字段:id,article_id,user_id

user用户表字段:id,name

多对多

一篇文章可以放权给多个用户看,一个用户有权限可以看多篇文章,文章与用户存在多对多的关系,中间通过权限表作出关联

需求一:查询文章的时候,显示有权限的用户

返回json

{
    "success": true,
    "message": "OK",
    "data": {
        "id": 12,
        "name": "文章标题",
        "content": null,
        "permissions": [
            {
                "id": 212,
                "userId": 1,
                "user": {
                    "id": 1,
                    "trueName": "李可",
                    "avatarUrl": null
                }
            }, 
        ]
    },
    "code": 200,
    "X-Request-Id": "ez6"
}

1.在article.php中写下多对多关联

/* *  扩展属性 添加扩展属性时,必须添加
 * @property array  $permission
×/


 public function extraFields()
    {
        return [
            'permissions'
        ];
    }

public function getPermission()
    {
        return $this->hasMany(Permission::class, ['article_id' => 'id'])->joinWith(['user']);
    }

2.在permission.php中写

/* *  扩展属性 添加扩展属性时,必须添加
 * @property array  $user
×/


 public function extraFields()
    {
        return [
            'user'
        ];
    }


 public function getUser()
    {
        return $this->hasOne(User::class, ['id' => 'userId']);
    }

请求时,在url后面添加expand  示例:url?expand=permissions.user

需求二:

返回json:

{
    "success": true,
    "message": "OK",
    "data": {
        "id": 12,
        "name": "文章名称",
        "content": "文章内容",
        "users": [
            {
                "id": 212,
                "name": "张三"
            },
            {
                "id": 213,
                "name": "李四",
            } 
        ]
    },
    "code": 200,
    "X-Request-Id": "ez6"
}

1.在article.php中

/* *  扩展属性 添加扩展属性时,必须添加
 * @property array  $permission
×/


 public function extraFields()
    {
        return [
            'permissions'
        ];
    }

public function getPermissions()
    {
        
        return $this->hasMany(User::class, ['id' => 'userId'])->via('Permission');
    }

 public function getPermission(){
        return $this->hasMany(Permission::class,['ezTargetId' =>'id']);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值