为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
Qyouu 2021-06-28 17:42:48
我正在尝试在 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_data从client_logs.通常,我会使用 PHP 脚本或类似的东西来做到这一点。但不幸的是,我在无法做到的情况下进行操作。我的问题是,使用 Laravel Migrations 是否可行,如果可以,如何实现?
查看完整描述

2 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

将您的新表向上迁移方法更改为:


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命令应该可以工作(用于撤消您的更改)!


查看完整回答
反对 回复 2021-07-09
  • 2 回答
  • 0 关注
  • 181 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信