在 Laravel 5 迁移中更新表并添加数据

2022-08-30 14:14:18

我需要在我的laravel项目中添加一个新列,没有问题,我用了更新,没关系。现在,我需要找出此表上有多少条记录,并使用一些值进行更新。Schema::table()

我有桌子:Warrants

Schema::create('warrant_grants', function(Blueprint $table) {
    $table->increments('id');
    $table->integer('warrant_plan_id');
    $table->integer('shareholder_id');
});

因此,我使用新的迁移文件创建了新字段:

Schema::table('warrant_grants',function ($table) {
    $table->string('name',100);
});

现在我需要用一些值更新表中的这个字段,例如,如果表有100条记录,那么我需要在每一行中插入值“Warrant-X”,其中X是从1到100的数字。例如:name

权证-1, 权证-2, ....认股权证-100。

我花了几个小时寻找一些使用Seeds做到这一点的方法,但我没有找到。所以基本上我有两个问题:

  • 我可以在Laravel 5中使用Seeds来更新值,或者我可以插入它们吗?
  • 我是否可以在种子(或迁移)中创建一些 SQL 来为我执行此更新?

答案 1

基于这个链接,我找到了答案:https://stackoverflow.com/a/23506744/4650792

Schema::table('warrant_grants',function ($table){
        $table->string('name',100)->after('id')->nullable();
    });

    $results = DB::table('warrant_grants')->select('id','name')->get();

    $i = 1;
    foreach ($results as $result){
        DB::table('warrant_grants')
            ->where('id',$result->id)
            ->update([
                "name" => "Warrant-".$i
        ]);
        $i++;
    }

无论如何,谢谢你的帮助。


答案 2

其他答案是正确的。但请注意,如果您有很多记录,则使用ORM更新所有这些记录可能需要一些时间。使用原始 SQL 查询可以更快地完成此操作。

Schema::table('warrant_grants',function ($table){
        $table->string('name',100)->after('id')->nullable();
    });
DB::raw("UPDATE warrant_grants SET name=name+id");

SQL查询并不精确,您必须为自己的数据库制作它,但是您明白了这一点。


推荐