laravel 多对多
2018年6月29日1.创建表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#创建用户表 CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(190) COLLATE utf8_unicode_ci NOT NULL, `password` varchar(60) COLLATE utf8_unicode_ci NOT NULL, `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `users_username_unique` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci #创建角色表 CREATE TABLE `roles` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `slug` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `roles_name_unique` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci #创键中间表 CREATE TABLE `role_users` ( `role_id` int(11) NOT NULL, `user_id` int(11) NOT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, KEY `role_users_role_id_user_id_index` (`role_id`,`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
2.开始在模型中写关联
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#在user模型中写 用户 class User extends Model { public function roles() { /* * 第一个参数:要关联的表对应的类 * 第二个参数:中间表的表名 * 第三个参数:当前表跟中间表对应的外键 * 第四个参数:要关联的表跟中间表对应的外键 * */ return $this->belongsToMany('App\Role','role_users','user_id','role_id'); } } #在Role模型中写 class Role extends Model { public function users() { /* * 第一个参数:要关联的表对应的类 * 第二个参数:中间表的表名 * 第三个参数:当前表跟中间表对应的外键 * 第四个参数:要关联的表跟中间表对应的外键 * */: return $this->belongsToMany('App\User','role_users','role_id','user_id'); } } |