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

时间:2017-06-29 08:00:15

标签: sql laravel artisan

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

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

Laravel的结构将是什么最好的解决方案?种子,迁徙,工厂?

2 个答案:

答案 0 :(得分:4)

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

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

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

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

    php artisan make:seed UpdateTranslationsSeeder
    
  2. 在run()方法中编写代码:

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

    php artisan db:seed --class=UpdateTranslationsSeeder
    
  4. 注意:如果在控制台中运行了最后一个命令后,我发现类错误UpdateTranslationsSeeder未定义,请在控制台中运行下一个命令告诉Laravel新类:

    composer dump-autoload -o
    

答案 1 :(得分:0)

我已采用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