我想使用artisan更新运行SQL脚本的数据库中的所有记录。例如,我需要执行这样的命令:
UPDATE translations SET field = 'meta_desc' WHERE field = 'page_desc'
Laravel的结构将是什么最好的解决方案?种子,迁徙,工厂?
答案 0 :(得分:4)
感谢大家的回复。感谢@RossWilson提出的使用迁移来更改数据库数据的想法。
但我认为,这不是一个好的解决方案,因为Laravel的概念涉及使用迁移进行数据库结构的改变。
阅读完Laravel手册后,我发现有一种特殊的代码结构可以处理db的数据。它是Seed。所以,我使用上面的示例查询的下一个种子解决了我的问题:
使用artisan命令创建新种子:
php artisan make:seed UpdateTranslationsSeeder
在run()方法中编写代码:
DB::table('translations')->where('field', 'page_desc')->update(['field' => 'meta_desc']);
在工匠中运行我的播种机:
php artisan db:seed --class=UpdateTranslationsSeeder
注意:如果在控制台中运行了最后一个命令后,我发现类错误UpdateTranslationsSeeder未定义,请在控制台中运行下一个命令告诉Laravel新类:
composer dump-autoload -o
答案 1 :(得分:0)
我已采用Paul Basenko的方法来更新现有数据以用于教育目的。 这非常有用!这是我的示例:
生成播种机:
php artisan make:seed UpdateCustomerSeeder
在运行方法中添加代码:
$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();
});
运行播种机:
php artisan db:seed --class=UpdateCustomerSeeder