【问题标题】:Should Laravel migrations be used to alter live column values?是否应该使用 Laravel 迁移来更改实时列值?
【发布时间】:2017-01-14 05:59:16
【问题描述】:

我一直认为迁移是创建/更改表的结构。但是,我需要更新我们实时数据库中的值。迁移是执行此操作的正确方法吗?还是我应该运行自己的 SQL?

【问题讨论】:

  • @rad11 我原本是这么想的——但在文档中,它特别指出播种是针对 test 数据的。这就是为什么我认为迁移会更合适。你怎么看?
  • 种子用于测试或“默认”数据,迁移用于结构,所以从我的角度来看,您应该运行自己的 sql 请求

标签: database laravel database-migration


【解决方案1】:

这有点基于意见,但我认为对现有行的 一些 更新在迁移中是合适的。举个例子:

Schema::table('users', function($table) {
    // make passwords nullable for folks who use SSO
    $table->string('password')->nullable()->change();
});

User::where('password', '')->update(['password' => NULL]);

这是合适的,因为迁移需要调整任何现有数据以适应新架构。这是迁移的一部分——播种器没有意义,手动查询有可能被其他开发人员或在特定环境中忽略/遗忘。

【讨论】:

    【解决方案2】:

    种子的一种优雅方式是使用 Laravel Excel - http://www.maatwebsite.nl/laravel-excel/docs

    一个例子是这个(在你的运行函数中)

            Excel::load(database_path('seeds/csv/your_seed_info.csv'), function($reader) {
    
            // Getting all results
                $results = $reader->get();
    
                foreach ($results as $item) {
                $comp = Model::create([
    
                    'field1' => $item->field1,
                    'field2' => $item->field2,
                        ....
                    'fieldn' => $item->fieldn,
                ]);
            }
    
             }); 
    

    确保将其放在顶部 use Maatwebsite\Excel\Facades\Excel;

    【讨论】:

      【解决方案3】:

      迁移只能用于数据库架构。播种机只能用于测试数据。如果您要更改记录的实际内容,您应该手动、使用代码或使用您自己的 SQL 来完成。

      来自 Laravel 文档:

      关于播种https://laravel.com/docs/5.3/seeding

      Laravel 包含一个简单的方法,使用种子类为您的数据库播种测试数据。

      关于迁移https://laravel.com/docs/5.3/migrations

      迁移就像数据库的版本控制,让您的团队可以轻松修改和共享应用程序的数据库架构。

      【讨论】:

      • 不过,这听起来不像是测试数据。我不认为在某些情况下对现有行进行自动更新是不合适的。例如,如果您将用户密码设置为 nullable,则在迁移中放置 UPDATE users SET password=NULL where password='' 可能是合适的。
      猜你喜欢
      • 2016-08-28
      • 2021-03-02
      • 2018-10-04
      • 1970-01-01
      • 2023-03-07
      • 2014-08-16
      • 2017-10-03
      • 2016-07-12
      • 2016-09-10
      相关资源
      最近更新 更多