2

毎日の cronjob として実行される symfony コマンドを作成します。タスクは、さまざまな CSV ファイルからデータベースにデータをインポートすることです (クリーン テーブル、更新なし)。

これまでのところ、これは非常に簡単ですが、インポートが失敗した場合は古いデータのフォールバックも必要です。教義とは異なる方法で、私は次のことを行います:

  1. サフィックス _tmp が付いたテーブルにデータをインポートします。
  2. すべてが正常に機能する場合: 元のテーブルの名前を変更し、サフィックス _backup を追加し、新しいテーブルから _tmp サフィックスを削除します。

    何か問題が発生した場合: _tmp-Tables を削除すると、元のテーブルはそのまま残ります。

教義については、このタスクに関する適切なドキュメントを見つけることができません-そして、私の現在の知識はこれに必要なほど良くありません)。私が見つけたのはこの投稿だけでした: Doctrine Backuptables しかし、私はそれを十分に理解しておらず、これが一般的な方法であるかどうかもわかりません。

私が実装する回避策は次のとおりです。

// Backup original Table, Truncate Original Table, Import new Data
$dbpw = $this->getContainer()->getParameter('database_password');
$dbuser = $this->getContainer()->getParameter('database_user');
$dbname = $this->getContainer()->getParameter('database_name');
exec('mysqldump -u '.$dbuser.' -p'.$dbpw.' '.$dbname.' customer > '.$dbBackupPath.'customer.sql');

$connection = $em->getConnection();
$plattform = $connection->getDatabasePlatform();
$connection->executeQuery('SET FOREIGN_KEY_CHECKS = 0;');
$truncateSQL = $plattform->getTruncateTableSQL('customer');
$connection->executeUpdate($truncateSQL);
$connection->executeQuery('SET FOREIGN_KEY_CHECKS = 1;');

try
{
   $em->flush();
}
catch(\Exception $e)
{
   exec('mysql -u '.$dbuser.' -p'.$dbpw.' '.$dbname.' < '.$dbBackupPath.'customer.sql');
}

しかし、うまくいったとしても、これは良い解決策だとは思いませんか?

経験者の方にお聞きしたいのですがどうすればいいですか?

どうもありがとう

4

1 に答える 1