在 doctrine "mapping" 命名空间中未定义任何命令(doctrine-module mapping:import)



我正在尝试导入数据库以使用学说启动ZF3 PHP项目。

我已经阅读了有关如何从数据库创建实体并发出以下命令的教程:

$ cd myproject
$ ./vendor/bin/doctrine-module mapping:import

遇到此错误:

[SymfonyComponentConsoleExceptionCommandNotFoundException]
There are no commands defined in the "mapping" namespace.
The command:
$ ./vendor/bin/doctrine-module list

列出可用命令。仅列出orm:migration:dbal:,根本没有mapping:命令。

我在这里错过了某个安装阶段吗?

您不会缺少:mapping,因为学说工具中没有映射命令。学说Symfony束概率提出了自己的命令,并将其转发到学说工具中的另一个命令中。(一些具有一些同类知识可以确认的人?)。至于 ZF 使用php /vendor/bin/doctrine-module list列出了所有学说工具命令。您应该看一下学说ORM工具。

如文档中所述,您应该使用反向工程。正如我所知,您想从现有数据库创建模型/实体。

但是,在将数据库进行逆向工程之前,您应该考虑以下内容:

逆向工程是一个一次性过程,可以使您从项目开始。将现有数据库模式转换为映射文件,仅检测约70-80%的必要映射信息。此外,从现有数据库中的检测无法检测逆关联,继承类型,以外键为主要键的实体以及许多关于级联关联的语义操作。

并注意以下内容,因为这可能很重要,因为您必须检查已创建的内容并在需要时进行更正。

逆向工程并不总是根据特殊情况完美地工作。它只会检测多一对一的关系(即使它们是一对一的关系),并将尝试从多到许多表中创建实体。它还存在具有多个列名称的外国钥匙的命名问题。任何反向工程的数据库 - 施加机构都需要大量的手动工作才能成为有用的域模型。

,并且不要使用Symfony 3文档来帮助您进行Zend Framework的学说集成,因为两者都有自己的方式(捆绑关系与模块)。当然,Symfony Bundle或Zend模块中的某些内容是匹配的,但这仅基于Doctrine Itsself提供的工具。

由于评论而编辑

如注释中所述,尚不清楚哪个命令替换Symfony命令:$ php bin/console doctrine:mapping:import --force AcmeBlogBundle xml。在您的ZF2/3应用程序中,您没有此功能可以在学说(ORM)模块中立即为您生成映射。与Symfony一样,您可以指定要生成实体的捆绑包。这是在Symfony中构建的特定事物。为了模仿这是您自己在Zend Framework应用程序中自己做的。

在您的ZF应用程序中,您已经创建了自己的任务来执行此操作,因此您可以在可以访问EntityManager的某些东西上创建此作业。

    /** @var DoctrineOrmEntityManager $em */
    $em = $this->getEntityManager();
    $em->getConfiguration()->setMetadataDriverImpl(
        new DoctrineORMMappingDriverDatabaseDriver(
            $em->getConnection()->getSchemaManager()
        )
    );
    $cmf = new DoctrineOrmToolsDisconnectedClassMetadataFactory();
    $cmf->setEntityManager($em);
    $metadata = $cmf->getAllMetadata();
    $cme = new DoctrineOrmToolsExportClassMetadataExporter();
    //$_exporterDrivers = array(
    //    'xml' => 'DoctrineORMToolsExportDriverXmlExporter',
    //    'yaml' => 'DoctrineORMToolsExportDriverYamlExporter',
    //    'yml' => 'DoctrineORMToolsExportDriverYamlExporter',
    //    'php' => 'DoctrineORMToolsExportDriverPhpExporter',
    //    'annotation' => 'DoctrineORMToolsExportDriverAnnotationExporter'
    //);
    $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(ZendMvcMvcEvent $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

学说模块用户:

$ php /vendor/bin/doctrine-module orm:convert-mapping --from-database xml /path/to/mapping-path-converted-to-xml

最新更新