數(shù)據(jù)表之間是縱橫交叉、相互關(guān)聯(lián)的,laravel的一對(duì)一,一對(duì)多比較好理解,官網(wǎng)介紹滴很詳細(xì)了,在此我就不贅述啦,重點(diǎn)我記下多對(duì)多的關(guān)系
一種常見(jiàn)的關(guān)聯(lián)關(guān)系是多對(duì)多,即表A的某條記錄通過(guò)中間表C與表B的多條記錄關(guān)聯(lián),反之亦然。比如一個(gè)用戶(hù)有多種角色,反之一個(gè)角色對(duì)應(yīng)多個(gè)用戶(hù)。
為了測(cè)試該關(guān)聯(lián)關(guān)系,我們沿用官網(wǎng)的用戶(hù)角色示例:
需要三張數(shù)據(jù)表:users
、roles
和 role_user
,role_user
表按照關(guān)聯(lián)模型名的字母順序命名(這里role_user是中間表),并且包含 user_id
和 role_id
兩個(gè)列。
多對(duì)多關(guān)聯(lián)通過(guò)編寫(xiě)返回 belongsToMany
方法返回結(jié)果的方法來(lái)定義。廢話(huà)不說(shuō)多,直接上數(shù)據(jù)結(jié)構(gòu):
1:創(chuàng)建一個(gè)角色表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