如何在 Laravel 中更新生产数据库中的数据?
Posted
技术标签:
【中文标题】如何在 Laravel 中更新生产数据库中的数据?【英文标题】:How to update data in a production database in Laravel? 【发布时间】:2017-06-08 19:42:52 【问题描述】:我有两张桌子users
和user_informations
。它们通过一对一的关系联系在一起。
现在我想合并它们并删除user_informations
表,而不会丢失数据库中的数据或重置整个迁移。
最好的方法是什么?
我目前的表格结构是
users(id, name, password, remember_token, timestamps)
user_informations(id, user_id, first_name, last_name, avatar, description, timestamps)
我想将first_name
和last_name
合并到一个字符串中,并将其添加到用户的name
字段中,并将avatar
和description
移动到用户表中。
【问题讨论】:
请提供您的表格结构,同时显示您到目前为止所尝试的内容.. 将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_infomations
table。
【讨论】:
【参考方案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 数据?