如何在Laravel中将外键存储为数组?多关联模型处理方案
解决多对多关联的数据库设计问题
你当前的模型设计只支持一对一关联,要实现一本书对应多个作者和多个所有者,绝对不能直接在author_id、owner_id字段里存多个ID(比如用逗号分隔)——这种方式不仅查询效率极低,后期维护修改也容易出问题,完全不符合数据库设计规范。
正确的做法是用多对多关系的中间表来维护关联:
1. 调整Book与Author的关联
- 删掉Book模型里的
author_id字段 - 创建中间表
book_authors,包含两个核心字段:book_id:外键,关联Book表的idauthor_id:外键,关联Author表的id
(可以把这两个字段设为联合主键,避免重复关联)
- 一本书对应多个作者时,就在这个中间表里添加多条记录,每条记录对应一个作者与这本书的关联。
2. 调整Book与Owner的关联
- 删掉Book模型里的
owner_id字段,同时删掉Owner模型里的book_id字段 - 创建中间表
book_owners,包含两个核心字段:book_id:外键,关联Book表的idowner_id:外键,关联Owner表的id
- 一本书有多个所有者时,同样在这个中间表里添加多条记录来维护关联。
调整后的各模型字段:
Book模型
id(主键)namephotois_available
Author模型
id(主键)namephoto
Owner模型
id(主键)namephoto
这种设计完全符合数据库范式,查询、修改、删除关联关系都很方便,还能利用数据库索引提升性能。
内容的提问来源于stack exchange,提问作者Rabin Acharya
相关产品推荐
相关产品推荐

