我正在为网站创建架构,该网站的图片和对象类型为post
,图片可能属于该网站。所以我的图像数据库可能如下所示:
# 'Image' table
----------------
id
name
url
post_id
然后,对于每个帖子,我都可以抓住它的图像。但是:
page
对象类型,我必须确保它们永远不会有id
。所以我认为一个好的开始就是从图像中删除post_id
字段,因为它比它的价值更麻烦。这种manyToMany问题的最佳解决方案是什么?目前我正在考虑在表格之间:
# 'Gallery' pivot table
------------------------
id
object_type [post or page]
object_id
image_id
现在posts
和pages
可以有多个images
。我只是通过这个来抓取对象类型的所有相关图像。这是正确的吗?如果它有任何区别,我使用 Laravel 框架。我正在构建一个相当大的应用程序,我意识到,如果我早点弄错了,它可能会在以后真的咬我。
答案 0 :(得分:1)
你仍然回答了你的问题:-) 我会选择多对多关系 - 因此需要一个数据透视表。
有一种约定,即数据透视表名称在其模型连接后以字母顺序命名。因此,例如在您的情况下,您的数据透视表将如下所示:
table: image_post
------------------------
id | image_id | post_id
查看documentatin以获取更多信息:many-to-many
渴望加载也是一个有趣的部分: eager loading
e.g。查询特定帖子及其所有图片:
$post = Post::with( 'images' )->find($id);