laravel - 是否有一个多态表来存储我的图像信息比每个模型的单独表更有效
问题描述
背景资料:
在 Laravel 7 中,我有许多模型,例如Product、Variant、User、Container和Package可以有一个图像。
问题:
我应该创建一个名为 images 的多态表来存储所有模型的图像吗?
或者使用单独的表来存储该特定模型的图像是否更有效?
- 例如 product_images、variant_images、user_images 等...
笔记:
该产品有大约 600 条记录。
Variant有大约 200 条记录。
用户有大约 10 条记录。
Container有大约 300 条记录。
该包有大约 200 条记录。
解决方案
在效率、灵活性和数据库架构的情况下,最好将相关数据存储在一张表中,我们不会将笔记本电脑存储在名为的表中laptops
,将手机存储在名为的表中,mobiles
我们将它们存储在products
表中,因此为每个模型创建表来存储图像不是最好的解决方案最好的解决方案是创建 1 个表来存储所有模型的图像,所以答案是多态关系。
但是让我们回到我之前输入的内容:
在效率和灵活性以及数据库架构的情况下,最好将相关数据存储在一张表中
如果我们想存储 pdf 或 excel 表格或将视频附加到产品上,我们是否要为每种类型的文件创建表格,例如视频表格?
嗯......肯定不是这样我们怎么能处理这个?
很简单,我们所要做的就是只创建一个表来存储媒体/文件,因此我们将创建一个名为files
example 的表并将所有图像、视频等存储在该表中
好的,现在我们知道了如何使用 laravel 实现这一点的概念?
首先使用以下命令创建迁移和模型:
php artisan make:model File -m
在创建的迁移文件中,确保添加正确的列,如下所示:
public function up()
{
Schema::create('files', function (Blueprint $table) {
$table->id();
$table->string('file'); // to store the location of the file/media
$table->morphs('fileable');
$table->timestamps();
});
}
然后运行php artisan migrate
现在在AppServiceProvider
位于函数app/Providers
中boot
添加以下内容:
\Illuminate\Database\Eloquent\Relations\Relation::morphMap([
'products' => 'App\Product',
'variants' => 'App\Variant',
'users' => 'App\User',
'containers' => 'App\Container',
'packages' => 'App\Package'
]);
完毕!
有关多态关系的更多信息,请查看此链接
推荐阅读
- php - Woocommerce Shop 页面仍然显示旧的主题设计
- haskell-stack - 使用堆栈安装haskell的问题
- reactjs - 如何在 Azure 中实现授权码授予
- vue.js - vue中具有特定样式的对象数组
- java - 回调完成时在TextView上的Android setText
- scala - Spark - 如何获得价值,而不是列本身?
- matlab - 初始化 pimp 控制器失败:绑定到 tcp://* 时出错:9620-9620 范围内没有可用端口
- cmake - 我可以用 CMake 和 vcpkg(很好地)管理 QuantLib 吗?
- reactjs - 在我的 reactjs 电子商务网站购物篮中添加数量
- javascript - 在反应中更新单个字段不起作用