我应该在 Laravel 数据库迁移中操作数据吗?还是我应该在其他地方做?

问题描述 投票:0回答:2

我正在计划对我的数据库进行重大更改,这将需要一组 SQL 指令(可能还需要一个非 SQL 脚本)来将旧数据适应新架构。

现在,在迁移脚本上操作数据是个好主意吗?或者它只是为了架构(数据库结构)更改?

php sql laravel migration laravel-migrations
2个回答
1
投票

由于迁移的工作方式,数据操作不适合在迁移中执行。我建议仅使用迁移来定义数据库模式。

迁移被设计为在出现问题时能够“回滚”,而这通过数据操作是不可能实现的。

在 Laravel 中,迁移是按照它们创建的确切顺序按顺序执行的,允许 Laravel 跟踪它们的执行和顺序。这意味着您无法有选择地运行特定的类或文件。例如,您可能希望在部门表之前播种用户表,反之亦然,但迁移不提供这种灵活性。

对于数据操作,我建议使用播种器,因为它们允许您通过以下方式选择在任何时间点运行哪个类:

 php artisan db:seed --class=ClassName

顾名思义,播种器用于填充数据库。

如果您要更改现有数据,而不是填充新表,或者要将旧数据迁移到新表,那么 Artisan 命令是更好的解决方案。


0
投票

在考虑迁移时,有两个问题很重要。

  1. 速度:php通常会有超时的情况。当您的迁移完成 1/2 时会发生什么?
  2. 将来运行:如果您在几个月内运行此迁移,您的应用程序代码可能会有所不同。

原始查询有助于解决这两个问题。

$elements = DB::Select(DB::Raw('SELECT element_id FROM record GROUP BY element_id'));

foreach ($elements as $element)
{
    DB::Statement('
        INSERT INTO account (created_at, updated_at, name, element_id)
        VALUES (NOW(), NOW(), "Migrated account", '. $element->element_id .')
    ');
}
© www.soinside.com 2019 - 2024. All rights reserved.