【问题标题】:Data migration from old table into new table, with Laravel 4使用 Laravel 4 将数据从旧表迁移到新表
【发布时间】:2013-12-26 09:39:09
【问题描述】:

是否可以将数据从旧表复制到新表而不是rename?我们正在计划一次重大的数据库架构升级,并希望保留当前的数据表,因此迁移down() 可以像删除新创建的表一样简单。

我们意识到这破坏了向后兼容性,因为migrate:rollback 并没有真正将任何新数据回滚到以前的状态;但是由于架构更新的规模,启用这样的事情将非常昂贵,只要它保留旧表,我们就满足于简单的单向迁移。

这可以单独在 Laravel 的迁移和架构中完成吗?

【问题讨论】:

    标签: php laravel migration laravel-4 database-migration


    【解决方案1】:

    感谢@TonyArra 和@Fractaliste 的建议,我们现在执行以下操作,这使我们能够测试运行迁移和回滚,而不必担心数据丢失。

    use Illuminate\Database\Migrations\Migration;
    
    use MyNewModel;
    
    class DataConvert extends Migration {
    
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            foreach(MyOldModel::all() as $item)
            {
                MyNewModel::create(array(...));
            }
    
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            MyNewModel::truncate();
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      据我所知,Laravel 中没有复制功能可以做到这一点,但使用模型相当容易。例如,如果您想将数据从表 users 移动到 newusers,您可以在 NewusersTableSeeder 运行函数中添加以下内容:

      $users = User::all()->toArray();
      foreach ($users as $user) {
          $user['newField'] = "data";
          Newuser::create($user);
      }
      

      (建议在播种器中完成,因为您应该已经在 DatabaseSeeder.php 中拥有Eloquent::unguard();

      【讨论】:

        【解决方案3】:

        进入down() 函数并在删除表之前,我认为您可以执行数据导出。

        迁移的基本用途是创建/删除表。但是没有什么能阻止你做一个更复杂的。工匠工具提供对任何 Laravel 功能的访问(我认为除了网络的 Input 或 Cookies)

        【讨论】:

          【解决方案4】:

          不确定它是否有帮助,但我编写了一个小类,它有助于根据您在 xml 文件中提供的规则在具有完全不同结构的两个数据库之间复制数据,请参阅https://github.com/Binternet/redb 所以也许你可以在完成最后一次迁移时启动它

          【讨论】:

            猜你喜欢
            • 2016-07-23
            • 2017-12-11
            • 2020-10-03
            • 2017-02-14
            • 1970-01-01
            • 2019-04-16
            • 2013-05-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多