Laravel 学习笔记之一:备份数据以及数据填充
进行数据备份
1. 新建备份 command
php artisan make:command BackupTables
2. 数据备份代码
public function handle()
{
$tables = ['table_name1', 'table_name2', 'table_name3'];
foreach ($tables as $k => $v) {
$data = DB::table($v)->get();
$file_name = $v . '.json';
$data_json = json_encode($data, true);
file_put_contents(__DIR__ . '/../../../database/data/'.$file_name, $data_json);
}
}
数据填充
1. 新建填充 command
php artisan make:seeder TablesSeeder
2. 数据填充代码
public function run()
{
$tables = ['table_name1', 'table_name2', 'table_name3'];
// 先清空数据
foreach ($tables as $k => $v) {
DB::statement("truncate table $v;");
}
foreach ($tables as $k => $v) {
$file_name = $v . '.json';
$data = file_get_contents(__DIR__ . '/../data/'.$file_name);
$data = json_decode($data, true);
DB::table($v)->insert($data);
}
}
至此,算是大功告成了!但是,今天从线上备份数据,然后本地填充的时候却报错了Doctrine\DBAL\Driver\PDOException::(“SQLSTATE[HY000]: General error: 1390
Prepared statement contains too many placeholders”)。一查,数据条目多,所以导致这个”bug”的出现。搞了一通,改为以下的代码,完美解决!
.
.
.
$count = count($data);
if ( $count < 1000 ){
DB::table($v)->insert($data);
}else{
foreach (array_chunk($data, 1000) as $key => $value) {
DB::table($v)->insert($value);
}
}
.
.
.
本作品采用《CC 协议》,转载必须注明作者和本文链接