如何在 Laravel 中更新生产数据库中的数据?

Posted

技术标签:

【中文标题】如何在 Laravel 中更新生产数据库中的数据?【英文标题】:How to update data in a production database in Laravel? 【发布时间】:2017-06-08 19:42:52 【问题描述】:

我有两张桌子usersuser_informations。它们通过一对一的关系联系在一起。

现在我想合并它们并删除user_informations 表,而不会丢失数据库中的数据或重置整个迁移。

最好的方法是什么?

我目前的表格结构是

users(id, name, password, remember_token, timestamps)

user_informations(id, user_id, first_name, last_name, avatar, description, timestamps)

我想将first_namelast_name 合并到一个字符串中,并将其添加到用户的name 字段中,并将avatardescription 移动到用户表中。

【问题讨论】:

请提供您的表格结构,同时显示您到目前为止所尝试的内容.. user_infomations 表数据添加到users 表,而不是删除user_infomations 表。 我的意思是如何正确地做到这一点。我做了一个迁移,将向users 表添加两列,并创建了一个将合并数据的播种器,之后,另一个迁移将删除user_informations 表。但是当我将它移动到服务器并运行migrate 命令时,它将在运行播种机之前删除user_informations 表。 【参考方案1】:

您可以编写一个小脚本,从user_informations 获取数据并将其添加到users 表中。比如:

User::chunk(1000, function ($users) 
    foreach ($users as $user) 
        $user->update($user->user_informations);
    
);

【讨论】:

我应该在哪里写这个?我应该如何处理迁移?我在播种器中编写了一个类似的脚本,但是当我将迁移和播种器移动到服务器时,它会在我运行播种器之前删除user_informations 表。由于此更改需要两次迁移,一个用于将列添加到users 表,另一个用于删除user_informations 表。 视情况而定。如果您有数据并且只想将其传输到users 表一次,只需将代码放入路由文件内的简单闭包中并运行它。然后修复迁移。【参考方案2】:

你需要做三个步骤:

您需要对用户表进行迁移,使其包含用户信息 为用户创建一个循环并从user_infomations 表中获取值的命令 检查一切正常后,迁移到 deleteuser_infomationstable。

【讨论】:

【参考方案3】:

我通常会创建一个专用的播种器类,然后在特定的迁移文件中调用它。这样我就不必创建单独的工匠命令。

<?php

// ... regular migration file

public function up()

    // Run your regular Schema::...() methods here to create / update tables, if needed.
 
    // Call dedicated seeder
    Artisan::call('db:seed', [
        '--class' => 'DbRefactor/SeederClassForThisMigrationSample',
        '--force' => true // Make sure it also runs in production environment
    ]);


// In the down() method you could also call a seeder which would do a 'reverse', if needed.

【讨论】:

以上是关于如何在 Laravel 中更新生产数据库中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel 框架更新 MySQL 中的 json 数据?

如何使用 laravel 更新 postgresql 数据库中的 json 数据?

如何更新 laravel 中的数据?

如何使用 Laravel 使用视图中的函数更新数据库中的列

如何更新 laravel 中的 master 和 detail 表单?

使用 Laravel 5 中的 --force 进行生产时,数据库卡在使用播种机迁移