7

PHP からデータベースを再作成するにはどうすればよいでしょうか。おそらくデフォルト データを挿入します。現在、単体テストの動作を使用する予定です。

Zend_Test単体テストにDoctrine 2、Zend Framework 1.11を使用しています

CLIを使用できました

doctrine orm:schema-tool:update --force

または

doctrine orm:schema-tool:drop --force
doctrine orm:schema-tool:create

PHPの代替品を探していますが、これまでのところこれを見つけまし

しかし、それは次のようになります

$tool = new \Doctrine\ORM\Tools\SchemaTool($em);
$classes = array(
  $em->getClassMetadata('Entities\User'),
  $em->getClassMetadata('Entities\Profile')
);
$tool->dropSchema($classes, \Doctrine\ORM\Tools\SchemaTool::DROP_DATABASE);
$tool->createSchema($classes);

そして、モデルクラスを指定する必要はありません。特に開発中は、変更できる場合があります。以下で指定されたすべてのクラスから読み取る必要があります... CLIと同様に、必要なクラスを指定する必要はありませんか?

$driverImpl = $config->newDefaultAnnotationDriver(array(realpath('../models')));
$config->setMetadataDriverImpl($driverImpl);
4

3 に答える 3

5

使用できます

Doctrine 用の PHPUnit 拡張機能は、PHPUnits データベース拡張機能へのいくつかのフックを提供し、データベースに対して Doctrine 2 コードをテストするための非常に便利な方法を提供します。

Readme には、データベース スキーマをオンザフライで作成する方法を示す例など、いくつかの例があります。Benjamin Eberlei は Doctrine 2 の中心的な貢献者です。

B. Eberlei の Ultimate Guide to DB Testing with PHPUnit も参照してください。

于 2010-12-17T14:07:20.920 に答える
1

EntityManager をセットアップするときにモデルへのパスを設定したので、このパスを再宣言する必要なく (および各クラスを宣言する必要なく) コードでスキーマを作成できます。これを行うには、EntityManager の構成済みインスタンスへの参照を取得し、ClassMetadataFactory#getAllMedata() を呼び出すことができる ClassMetadataFactory への参照を取得する必要があります。

これは、どこからでも EntityManager への参照を取得できる静的な Bootstrap クラスがあり、単体テストで setUp() 呼び出しでスキーマを再作成する例です。

class ModelTestCase extends PHPUnit_Framework_TestCase {

    public function setUp() {
        $em = Bootstrap::getEntityManager();
        $tool = new \Doctrine\ORM\Tools\SchemaTool($em);

        $mdFactory = $em->getMetadataFactory();
        $tool->createSchema($mdFactory->getAllMetadata());
        parent::setUp();
    }
}
于 2011-08-18T17:00:00.903 に答える
0

ドクトリンは をサポートしていますfixtures。やってみて。

于 2010-12-17T11:50:34.857 に答える