tp6模型远程一对一hasOneThrough和远程一对多hasManyThrough参数说明

今天做数据查询,使用了模型关联,特此进行记录,有相关工作需求和技术需要的,可以参考:

看文档没有看的很清晰,所以亲自操作了一下,并在这里详细记录一下:

1. 首先看官方文档

2. 三张数据表(用户表sys_user,用户角色信息表sys_role,中间关系表sys_user_role),

注意:以下sql语句均为mysql5.7导出表结构

CREATE TABLE `sys_user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名',
  `nickname` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '昵称',
  `gender` tinyint(1) NULL DEFAULT 1 COMMENT '性别((1:男;2:女))',
  `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码',
  `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系方式',
  `status` tinyint(1) NULL DEFAULT 1 COMMENT '用户状态((1:正常;0:禁用))',
  `email` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户邮箱',
  `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标识(0:未删除;1:已删除)',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) 


CREATE TABLE `sys_user_role`  (
  `uid` bigint(20) NOT NULL COMMENT '用户ID',
  `rid` bigint(20) NOT NULL COMMENT '角色ID'
)


CREATE TABLE `sys_role`  (
  `roleid` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '角色名称',
  `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '角色编码',
  `status` tinyint(1) NULL DEFAULT 1 COMMENT '角色状态(1-正常;0-停用)',
  `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识(0-未删除;1-已删除)',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`roleid`) USING BTREE
)


填充数据,示例值

sys_user

user_role

 

system_role

3. 模型User, 正常模型类,增加方法 getrole 方法名可随意定义

注释部分是本次文章重点哦

class User extends Model
{ 
    public function getrole()
        {
            // hasOneThrough 入参,远程一对多和这个一样
            // 关联表模型
            // 中间表模型
            // 中间表与当前模型的关联外键
            // 关联表的主键
            // 当前模型表的主键
            // 中间表与关联模型的外键
            return $this->hasOneThrough(Role::class,UserRole::class,'uid','roleid','id','rid');
        }
}

4. 模型UserRole,注意中间表一定要继承 Pivot ,不是think\model

class UserRole extends Pivot
{
    //
}

5. 模型Role,正常模型类

class Role extends Model
{
    //
}

6、index控制器输出

public function index()
    {
       $user=User::with('getrole')->select()->toArray();
       halt($user);
    }

7、输出结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值