進行資料備份
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 協議》,轉載必須註明作者和本文連結