既存のデータベース (Doctrine で管理されていない) を操作する必要があり、このデータベースの新しいテーブルにのみ doctrine を使用したいと考えています。
リロード時にDB全体をドロップせず、ファイルで定義されたモデルのみをドロップするようにDoctrineに指示する方法はありyaml
ますか?
これは非常に古い質問だと思いますが、symfony を使用しているようです。
試す:
app/console --env=prod doctrine:schema:drop --full-database
これにより、DB 内のすべてのテーブルが削除されます。
この要点で、データベースからすべてのテーブルを切り捨てるために使用するタスクを見つけることができます:https ://gist.github.com/1154458
コアコードは次のとおりです。
$this->dbh = $connection->getDbh();
$this->dbh->query(sprintf('SET FOREIGN_KEY_CHECKS = 0;'));
$tables = $connection->import->listTables();
foreach ($tables as $table)
{
$this->dbh->query(sprintf('TRUNCATE TABLE %s', $tableName));
}
$this->dbh->query(sprintf('SET FOREIGN_KEY_CHECKS = 1;'));
@ gpilotino はい、同様の問題があります。PHPUnit 内からデータベースを削除して再構築する方法はないようです (Symfony テストの未来)。
'lime' で可能かもしれませんが、わかりません。
そのため、自動テストを実行できるように、データベースからすべてのデータをバックし、すべてのシーケンスをリセットする reverse ->save() 関数を作成する必要があります。
私の欲求不満をフォローしたくない人のために、私は両方を試しました:
1) symfony の内部から Task を使用する:
$optionsArray=array();
$argumentsArray=array();
$optionsArray[]="--all";
$optionsArray[]="--and-load";
$optionsArray[]="--no-confirmation";
$task = new sfDoctrineBuildTask($configuration->getEventDispatcher(), new sfFormatter());
$task->run($argumentsArray, $optionsArray);
2) PHP 内で symfony の外から実行する:
Doctrine_Manager::getInstance()->getCurrentConnection()->close();
exec('./symfony doctrine:build --all --and-load --no-confirmation');
接続を閉じた理由は、Postgres、MDBOC (選択したデータベース) が接続されているデータベースを削除しないためです。おそらくまだ何らかの問題があります。簡単なチュートリアルが示すほど簡単ではありません。さらに、マイクロスロップ製品ではさらに悪化します。
別のコマンド内からコマンドを実行するには、次bin/console doctrine:schema:drop --force
を試してください。
$command = $this->getApplication()->find('doctrine:schema:drop');
$returnCode = $command->run(new ArrayInput(['--force' => true]), $output);