当前位置: 首页 > 知识库问答 >
问题:

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

潘璞瑜
2023-03-14

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

我有表担保

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);
});

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

逮捕令-1,逮捕令-2,......逮捕证-100。

我花了几个小时寻找使用种子的方法,但我没有找到。所以基本上我有两个问题:

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

共有3个答案

艾正浩
2023-03-14

是的,您可以在迁移中执行更新/插入/任何操作。例如:

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

$i = 1;
foreach (WarrantGrants::all() as $warrant_grant) {
    $warrant_grant->update([
      'name' => 'Warrant-' . $i
    ]);

    $i++;
}
严柏
2023-03-14

其他答案是正确的。但是请注意,如果您有很多记录,那么使用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查询并不精确,您必须为自己的数据库创建它,但您明白了。

张银龙
2023-03-14

基于此链接,我找到了答案: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++;
    }

不管怎样,谢谢你的帮助,伙计们。

 类似资料:
  • 我已经创建了一个迁移文件,并在数据库中创建了表。现在,我想向现有迁移文件添加新列。我要做的是,打开迁移文件并在up()函数中添加列名,添加列名后,运行命令 如何向现有表中添加新列?

  • 我不知道如何使用Laravel框架将新列添加到现有的数据库表中。 我试图使用…编辑迁移文件。。。 在终端,我执行和。 如何添加新列?

  • 我想在laravel中现有的表中添加一些新列。 我已经在谷歌上搜索过了,在这些搜索之后,我已经使用命令创建了迁移。 将列添加到用户。php 创建之后,我运行这个命令。 但也犯了同样的错误: 基本表或视图已存在:1050个表“用户”已存在(SQL:create table(int unsigned not null自动递增主键,varchar(255)not null,varchar(255)not

  • 我不知道如何使用Laravel框架将新列添加到我现有的数据库表中。 我尝试使用...编辑迁移文件。 在终端中,我执行和。 如何添加新列?

  • 然而,我发现手动操作很不方便。有没有办法告诉Room:我不会接触任何现有的表,所以数据是安全的。请为我创建迁移?

  • 我有一些表,我想在这个表中添加新的列。我想添加默认值为空的字符串列。 我试着这样加上去 或 但我有一个错误