Laravel 更新数据库记录 运行 脚本

Laravel update database record running script

我想使用 artisan 更新我的数据库 运行 SQL 脚本中的任何记录。例如,我需要执行这样的命令:

UPDATE translations SET field = 'meta_desc' WHERE field = 'page_desc'

什么 Laravel 的结构是最好的解决方案?种子、移民、工厂?

感谢大家的回复。特别感谢@RossWilson 提出的使用迁移更改数据库数据的想法。

但我认为,这不是一个好的解决方案,因为Laravel的概念涉及使用迁移来改变数据库结构。

阅读 Laravel 的手册后,我发现有一个特殊的代码结构用于处理数据库的数据。这是一个Seed。因此,我使用上面示例查询的下一个种子解决了我的问题:

  1. 使用 artisan 命令创建了新种子:

    php artisan make:seed UpdateTranslationsSeeder
    
  2. 在运行()方法中写一段代码:

    DB::table('translations')->where('field', 'page_desc')->update(['field' => 'meta_desc']);
    
  3. 运行 我的播种机在 artisan:

    php artisan db:seed --class=UpdateTranslationsSeeder
    

注意:如果在 运行 在控制台中执行最后一个命令后,我得到一个关于 class UpdateTranslationsSeeder 未定义的错误 运行 控制台中的下一个命令告诉 Laravel 关于新 classes:

composer dump-autoload -o

出于教育目的,我采用了 Paul Basenko 方法来更新现有数据。 非常有用!这是我的例子:

  1. 生成播种机:

    php artisan make:seed UpdateCustomerSeeder
    
  2. 在运行方法中添加代码:

    $customers = Customer::all();
    
    $customers->each(function ($customer_update, $key) {
        $faker = Factory::create('it_IT');
    
        $customer_update->name = $faker->company;
        $customer_update->website = $faker->domainName;
        $customer_update->tax_number = $faker->vatId();
        $customer_update->phone = $faker->phoneNumber;
        $customer_update->email = $faker->safeEmail;
        $customer_update->street = $faker->streetAddress;
        $customer_update->city = $faker->city;
        $customer_update->zip_code = $faker->postcode;
        $customer_update->notes = $faker->sentence();
    
        $customer_update->save();
    });
    
  3. 运行 播种机:

    php artisan db:seed --class=UpdateCustomerSeeder