繁体   English   中英

使用Laravel 4从旧表迁移到新表的数据

[英]Data migration from old table into new table, with Laravel 4

是否可以将旧表中的数据复制到新表而不是rename 我们正在计划一个主要的数据库模式升级,并希望保留当前的数据表,因此迁移down()可以像删除新创建的表一样简单。

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

这可以在Laravel的迁移和模式中完成吗?

感谢@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();
    }

}

据我所知,Laravel中没有复制功能可以做到这一点,但是对于模型来说相当容易。 例如,如果要将数据从表用户移动到新用户,可以将以下内容添加到NewusersTableSeeder运行函数中:

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

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

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

迁移的基本用途是创建/删除表。 但没有什么可以阻止你做一个更复杂的。 而且工匠工具可以访问任何Laravel的功能(除了我认为的输入或Cookies之类的网络之外)

不确定它有帮助,但我写了一个小类,帮助根据你在xml文件中提供的规则在两个数据库之间复制完全不同的数据,请参阅https://github.com/Binternet/redb所以也许你可以解决这个问题完成上次迁移后

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM