Laravel 将数据从一个表移动到另一个表并删除数据来自的列?

我正在尝试在 Laravel 迁移中执行以下过程:


创建一个名为 的新表client_log_partitions。(完毕)


$table->create();


$table->bigIncrements('id')->unique();

$table->bigInteger('client_log_id');

$table->mediumText('partition_data');


$table->timestamps();

  • 我已经有一个表,client_logs其中的数据存储在bigText()名为log_data.

  • client_logs表中已经存在的每一行都需要每 250 KB(或 250,000 个字符,因为它应该是单字节编码)进行拆分,然后client_log_partitions作为分区插入到新表中,并引用client_logs它所属的条目。

我知道我可以使用 来实现这一点$table->postExecute(),我只是不知道我可以用什么来做到这一点。

将数据移动到新表后,我需要log_dataclient_logs.

通常,我会使用 PHP 脚本或类似的东西来做到这一点。但不幸的是,我在无法做到的情况下进行操作。


我的问题是,使用 Laravel Migrations 是否可行,如果可以,如何实现?


Qyouu
浏览 182回答 2
2回答

米琪卡哇伊

将您的新表向上迁移方法更改为:public function up(){    //Create the table    Schema::create('your_table_name', function (Blueprint $table) {        $table->bigIncrements('id')->unique();        $table->bigInteger('client_log_id');        $table->mediumText('partition_data');        $table->timestamps();    });    //Copy column from last table to new table    foreach(MyOldModel::all() as $item)    {        //now you can save old data into new table old data : $item -> log_data        //other operation you want        MyNewModel::create(array('partition_data' => $item -> log_data));//you can save other columns with adding array values    }    //Drop old table column    Schema::table('client_logs', function (Blueprint $table) {        $table->dropColumn('log_data');    });}我认为以这种方式也migrate:rollback命令应该可以工作(用于撤消您的更改)!
打开App,查看更多内容
随时随地看视频慕课网APP