數(shù)據(jù)表之間是縱橫交叉、相互關(guān)聯(lián)的,laravel的一對一,一對多比較好理解,官網(wǎng)介紹滴很詳細了,在此我就不贅述啦,重點我記下多對多的關(guān)系
一種常見的關(guān)聯(lián)關(guān)系是多對多,即表A的某條記錄通過中間表C與表B的多條記錄關(guān)聯(lián),反之亦然。比如一個用戶有多種角色,反之一個角色對應多個用戶。
為了測試該關(guān)聯(lián)關(guān)系,我們沿用官網(wǎng)的用戶角色示例:
需要三張數(shù)據(jù)表:users
、roles
和 role_user
,role_user
表按照關(guān)聯(lián)模型名的字母順序命名(這里role_user是中間表),并且包含 user_id
和 role_id
兩個列。
多對多關(guān)聯(lián)通過編寫返回 belongsToMany
方法返回結(jié)果的方法來定義。廢話不說多,直接上數(shù)據(jù)結(jié)構(gòu):
1:創(chuàng)建一個角色表roles
,并添加一些初始化數(shù)據(jù):
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
`remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('1', 'admin', 'admin@163.com', '$2y$10$J/yXqscucanrHAGZp9G6..Tu1Md.SOljX3M8WrHsUdrg