我正在构建一个laravel web应用程序,我希望用户在相册中创建相册并放入内容。他们可以放在专辑中的东西主要是图像,还包括文本,YouTube视频,soundcloud轨道等等(即将发布)。每一段内容都是专辑中的一个项目。
我的'解决方案': 我有一张专辑表和一张内容表。内容表行是我想要存储的所有内容。我想到了创建一个带有外键表的content_meta表(内容表又有一个外键到相册表)。内容表包含有关所存储内容类型的信息(图像,视频,文本,YouTube视频),content_meta表包含每条内容的所有信息。
例如,图像在内容表中有一行:
id | album_id | user_id | content_type
------------------------------
1231 | 311 | 973 | image
并且该图像具有以下content_meta表行
id | content_id | meta_option | meta_value
-------------------------------------------
1231 | 1231 | thumb_url | http://example.com/img/1231/thumb.jpg
1231 | 1231 | full_url | http://example.com/img/1231/thumb.jpg
1231 | 1231 | description | what an image this is!
我的问题是如何以正确的方式将这些内容存储在数据库中?。我提出的解决方案是可扩展的(对于许多专辑和许多用户而言)?将来添加更多内容类型会很容易吗?
我不是网络应用程序架构/设计方面的专家,因为我是一名自学成才的“开发人员”。我真的想学习如何正确地做事!
在许多现实生活中的例子中,我遇到了一个不同的解决方案,我看到图像存储在媒体表中。但是,我如何存储YouTube视频呢?我是否会为我想要存储的所有不同内容类型创建不同的表格(图像,视频,Youtube视频,Soundcloud歌曲等表格)?
或者我应该创建一个媒体(用于图像和视频)表和一个内容表(用于保存文本和html片段,如YouTube视频?)?
在我的应用程序中,您只会为每个专辑项目发布一种内容类型。不像你在Facebook上发布带有文字的图像!
通过向我提供有关如何解决这一难题的建议,你真的会帮助我!
答案 0 :(得分:0)
这是多态性的完美用法。你可以在桌子上存储不同类型的媒体。变形表将存储模型媒体类型等。
阅读此处的文档:http://laravel.com/docs/5.1/eloquent-relationships#polymorphic-relations
为了让你顺利进入Jeffery Way有一个很好的视频:https://laracasts.com/lessons/polymorphic-huh
Adam Wathan最近做了很好的演员:http://adamwathan.me/2015/09/03/pushing-polymorphism-to-the-database/