:mapping
Doctrine Tools 内にマッピング コマンドがないため、見逃すことはありません。Doctrine Symfony Bundle はおそらく独自のコマンドを作成し、それを Doctrine Tools 内の別のコマンドに転送します。(確認できる Symfony の知識を持っている人はいますか? )。ZFの使用についてphp /vendor/bin/doctrine-module list
は、Doctrine ツールのすべてのコマンドを一覧表示します。Doctrine ORM Toolsを見てください。
ドキュメント内で説明されているように、おそらくリバース エンジニアリングを使用する必要があります。私が理解したように、既存のデータベースからモデル/エンティティを作成したいと考えています。
ただし、データベースをモデルにリバース エンジニアリングする前に、Doctrine で述べられている次のことを考慮する必要があります。
リバース エンジニアリングは、プロジェクトを開始できる 1 回限りのプロセスです。既存のデータベース スキーマをマッピング ファイルに変換しても、必要なマッピング情報の約 70 ~ 80% しか検出されません。さらに、既存のデータベースからの検出では、逆関連付け、継承タイプ、主キーとして外部キーを持つエンティティ、およびカスケードなどの関連付けに対する多くの意味操作を検出できません。
また、作成されたものを確認し、必要に応じて修正する必要があるため、これは重要になる可能性があるため、次の点に注意してください。
特殊なケースによっては、リバース エンジニアリングが常に完全に機能するとは限りません。多対一の関係のみを検出し (一対一であっても)、多対多のテーブルからエンティティを作成しようとします。複数の列名を持つ外部キーの命名にも問題があります。リバース エンジニアリングされたデータベース スキーマは、有用なドメイン モデルになるためにかなりの手作業が必要です。
また、Doctrine の Zend Framework 統合を支援するために Symfony 3 のドキュメントを使用しないでください。どちらにも独自の方法があります (バンドルとモジュール)。確かに、Symfony バンドルまたは Zend モジュール内のいくつかのものは一致していますが、それは Doctrine 自体が提供するツールに基づいているだけです。
コメントがあったので修正
コメントで述べたように、どのコマンドが Symfony コマンドを置き換えるかは明確ではありません: $ php bin/console doctrine:mapping:import --force AcmeBlogBundle xml
. ZF2/3 アプリケーション内では、Doctrine (ORM) モジュール内で即座にマッピングを生成するこの機能がありません。Symfony と同様に、エンティティを生成するバンドルを指定できます。これは、Symfony 内でビルドされる特定のものです。これを模倣するには、Zend Framework アプリケーション内で自分で行います。
ZF アプリケーション内で、そのために独自のタスクを作成する必要があるため、EntityManager にアクセスできる場所でこのジョブを作成する必要があります。
/** @var \Doctrine\Orm\EntityManager $em */
$em = $this->getEntityManager();
$em->getConfiguration()->setMetadataDriverImpl(
new \Doctrine\ORM\Mapping\Driver\DatabaseDriver(
$em->getConnection()->getSchemaManager()
)
);
$cmf = new \Doctrine\Orm\Tools\DisconnectedClassMetadataFactory();
$cmf->setEntityManager($em);
$metadata = $cmf->getAllMetadata();
$cme = new \Doctrine\Orm\Tools\Export\ClassMetadataExporter();
//$_exporterDrivers = array(
// 'xml' => 'Doctrine\ORM\Tools\Export\Driver\XmlExporter',
// 'yaml' => 'Doctrine\ORM\Tools\Export\Driver\YamlExporter',
// 'yml' => 'Doctrine\ORM\Tools\Export\Driver\YamlExporter',
// 'php' => 'Doctrine\ORM\Tools\Export\Driver\PhpExporter',
// 'annotation' => 'Doctrine\ORM\Tools\Export\Driver\AnnotationExporter'
//);
$exporter = $cme->getExporter('xml', '/path/to/export/xml');
$exporter->setMetadata($metadata);
$exporter->export();
たとえばModule.php
、あなたのアプリケーションモジュールで。このメソッドを追加します。public function onBootstrap(MvcEvent $event)
class Module
{
public function onBootstrap(\Zend\Mvc\MvcEvent $event)
{
$entityManager = $event->getApplication()->getServiceManager()->get('doctrine.entitymanager.orm_default');
// code block above
// remove this code when export is done
}
}
指定した XML ファイルまたはファイル タイプ内のメタデータを取得したので、次のコマンドを使用してエンティティを作成できます。
$ php doctrine orm:convert-mapping --from-database xml /path/to/mapping-path-converted-to-xml
Doctrine モジュールのユーザー:
$ php /vendor/bin/doctrine-module orm:convert-mapping --from-database xml /path/to/mapping-path-converted-to-xml