现在有三个表
管理员表my_admin
角色表my_role
中间表my_admin_role
SET FOREIGN_KEY_CHECKS=0;
SET NAMES 'utf8';
-- ----------------------------
-- Table structure for `my_admin`
-- ----------------------------
DROP TABLE IF EXISTS `my_admin`;
CREATE TABLE `my_admin` (
`id` smallint(6) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL COMMENT '管理员名称',
`password` varchar(32) NOT NULL COMMENT '登录密码',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 -1:已删除 0:禁用 1:正常',
`email` varchar(255) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL COMMENT '描述',
`create_id` smallint(6) DEFAULT NULL COMMENT '创建人id',
`create_time` int(11) DEFAULT NULL COMMENT '创建时间',
`last_modified_id` smallint(6) DEFAULT NULL COMMENT '最后修改人id',
`last_modified_time` int(11) DEFAULT NULL COMMENT '最后修改时间',
PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for `my_admin_role`
-- ----------------------------
DROP TABLE IF EXISTS `my_admin_role`;
CREATE TABLE `my_admin_role` (
`id` smallint(6) NOT NULL AUTO_INCREMENT,
`admin_id` smallint(6) NOT NULL COMMENT '管理员ID',
`role_id` smallint(6) NOT NULL COMMENT '角色id',
PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for `my_role`
-- ----------------------------
DROP TABLE IF EXISTS `my_role`;
CREATE TABLE `my_role` (
`id` smallint(6) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '角色名称',
`pid` smallint(6) DEFAULT NULL COMMENT '父角色id',
`sort` smallint(6) DEFAULT NULL COMMENT '排序',
`create_id` smallint(6) DEFAULT NULL COMMENT '创建人id',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 -1:已删除 0:禁用 1:正常',
`create_time` int(11) DEFAULT NULL COMMENT '创建时间',
`last_modified_id` smallint(6) DEFAULT NULL COMMENT '最后修改人id',
`last_modified_time` int(11) DEFAULT NULL COMMENT '最后修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在model中定义两个类,Admin 和 Role
belongsToMany( 'role','my_admin_role' );
}
public function getStatusAttr($value) {
$status = [
'0' => '禁用',
'1' => '启用'
];
return $status[ $value ];
}
}
belongsToMany('admin','my_admin_role');
}
}
注意这里的第二个参数是完全的中间表名,要带上前缀的
1、查询
在控制器Index中
查询角色时,同时查出所有的管理员,注意此时得到的是一个对象数组
get(1);
$admins = $role->admin;
dump($admins);
}
}
get(1);
$role = $admin->role;
dump($role);
}
}
2、新增
get(1);
//添加一条
$admin->role()->save([
'name' => '超级管理员',
'pid' => 0,
]);
//添加多条
$admin->role()->saveAll([
[
'name' => '版主',
'pid' => 0,
],
[
'name' => '体育栏目版主',
'pid' => 1,
],
[
'name' => '娱乐栏目版主',
'pid' => 1,
],
]);
}
}
在role表和admin_role表中会同时自动生成新的数据
3、只更新中间表
get(1);
//中间表添加
$admin->role()->attach([1,2,3,5,6]);
//中间表删除
$admin->role()->detach([2,3,4,5]);
}
}
在修改多选时,可以将新增的attach(),将要删掉的detach()