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

新手上路,请多包涵

我需要在我的 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);
});

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

权证 1、权证 2、….权证 100。

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

  • 我可以在 Laravel 5 中使用 Seeds 来更新值还是直接插入它们?
  • 我可以在种子(或迁移)中创建一些 SQL 来为我做这个更新吗?

原文由 Deric Lima 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 548
2 个回答

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

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

原文由 Deric Lima 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 vfsoraki 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏