Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我应该在Laravel数据库迁移上操作数据吗?或者我应该在别的地方做?_Php_Sql_Laravel_Migration_Laravel Migrations - Fatal编程技术网

Php 我应该在Laravel数据库迁移上操作数据吗?或者我应该在别的地方做?

Php 我应该在Laravel数据库迁移上操作数据吗?或者我应该在别的地方做?,php,sql,laravel,migration,laravel-migrations,Php,Sql,Laravel,Migration,Laravel Migrations,我正在计划对数据库进行一次重大更改,这将需要一组SQL指令(可能还有一个非SQL脚本)来将旧数据适应新模式 现在,在迁移脚本上操作数据是个好主意吗?或者它只是用于模式(DB结构)更改?数据操作不是迁移的事情。因为自然迁移是有效的。我将建议使用迁移只定义数据库模式 迁移是由Laravel按照创建的确切顺序逐个执行的,因此它可以跟踪执行情况和执行顺序参考Antonio Carlos Ribeiro 这会阻止一个人负责他/她想要运行的类或文件。例如,您可以选择在departments表之前为users

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


现在,在迁移脚本上操作数据是个好主意吗?或者它只是用于模式(DB结构)更改?

数据操作不是迁移的事情。因为自然迁移是有效的。我将建议使用迁移只定义数据库模式

迁移是由Laravel按照创建的确切顺序逐个执行的,因此它可以跟踪执行情况和执行顺序参考Antonio Carlos Ribeiro

这会阻止一个人负责他/她想要运行的类或文件。例如,您可以选择在departments表之前为users表设置种子,也可以选择在departments表之前设置种子,反之亦然。移民并不是伴随着这种自由而来的

对于数据操作,我建议您使用seeders来处理它,因为您可以通过使用

php artisan db:seed--class=ClassName


正如名字所说,种子。这意味着填充数据库。

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

  • 速度:php通常有一个超时。迁移完成1/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 .')
        ');
    }
    

    可以使用迁移,但是。。。我不得不建议不要进行大改动的迁移。如果PHP代码超时会发生什么?如果内存不足怎么办。相反,保留原始数据库。复制/创建一个可以更改的全新环境。您可以将用户转发到新站点或更改DNS记录。如果出现问题,您需要能够恢复。有备用计划@jjwdesign很好。但是,这是一个CLI脚本,我设置它不超时,并且此迁移将在我当前的数据集上运行,当时数据集非常小。但数据库正在增长(这组变化是由于增长)。