首页 > 解决方案 > 是否有一个多态表来存储我的图像信息比每个模型的单独表更有效

问题描述

背景资料:

在 Laravel 7 中,我有许多模型,例如ProductVariantUserContainerPackage可以有一个图像。

问题:

我应该创建一个名为 images 的多态表来存储所有模型的图像吗?

或者使用单独的表来存储该特定模型的图像是否更有效?

笔记:

标签: laraveleloquent

解决方案


在效率、灵活性和数据库架构的情况下,最好将相关数据存储在一张表中,我们不会将笔记本电脑存储在名为的表中laptops,将手机存储在名为的表中,mobiles我们将它们存储在products表中,因此为每个模型创建表来存储图像不是最好的解决方案最好的解决方案是创建 1 个表来存储所有模型的图像,所以答案是多态关系

但是让我们回到我之前输入的内容:

在效率和灵活性以及数据库架构的情况下,最好将相关数据存储在一张表中

如果我们想存储 pdf 或 excel 表格或将视频附加到产品上,我们是否要为每种类型的文件创建表格,例如视频表格?

嗯......肯定不是这样我们怎么能处理这个?

很简单,我们所要做的就是只创建一个表来存储媒体/文件,因此我们将创建一个名为filesexample 的表并将所有图像、视频等存储在该表中

好的,现在我们知道了如何使用 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/Providersboot添加以下内容:

\Illuminate\Database\Eloquent\Relations\Relation::morphMap([
    'products'   => 'App\Product',
    'variants'   => 'App\Variant',
    'users'      => 'App\User',
    'containers' => 'App\Container',
    'packages'   => 'App\Package'
]);

完毕!

有关多态关系的更多信息,请查看此链接


推荐阅读