使用symfony2和doctrine从现有数据库生成单个实体

是否有可能使用Symfony2控制台工具从数据库中生成一个实体?

在编码的中间,我不得不添加一个表,并且对现有的实体类进行了修改。 所以我不希望所有的实体都重新生成。

任何build议将不胜感激!

我有同样的问题,你必须这样做:

php app/console doctrine:mapping:convert metadata_format \ ./src/App/MyBundle/Resources/config/doctrine \ --from-database \ --filter="Yourtablename" 

然后

 php app/console doctrine:mapping:import AppMyBundle \ metadata_format --filter="Yourtablename" 

其中metadata_format是您想要生成的文件结尾(例如xml,yml,注释)

最后

 php app/console doctrine:generate:entities AppMyBundle --no-backup 

像这个教义只会加载你需要的实体。 只要小心filter,你必须使用CamelCase!

希望对你有帮助

对于第三个命令,教义不断重新生成所有的实体文件。 通过在包之后添加实体名称,它只会生成我感兴趣的实体。

 php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup 

Symfony 2.7选项注释和[/ xml / yml]的简单工作解决scheme请参阅http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html

3步执行3个命令:

 $ php app/console doctrine:mapping:import --force AppBundle xml --filter="Meeting" 

注意:如果你的数据库名称是my_meeting你需要在filter="MyMeeting" MyMeeting其改为MyMeeting来find你的表名,这是因为doctrine总是将下划线filter="MyMeeting" ,并且把Camel-case添加到你的表名中。不,你会得到这个错误: “数据库没有任何映射信息”)

 $ php app/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="Meeting" 

注意:确保你的namespace AppBundle\Entity;如下面的你的Meeting.php类文件是这样的:

 <?php /** * Created by PhpStorm. * User: * Date: 03-Sep-2015 * Time: 3:23 PM */ namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; 

如果不join)。

哪里:

  • AppBundle正是您在Symfony 2.7中的“AppBundle”
  • 会议是目标表(骆驼大小写敏感)

要确定,请检查以下目录:

SRC \的appbundle /资源/configuration/教义/ Meeting.orm.xml

并确保您只有用于要创build实体类文件的表的.xml文件,并且没有其他文件。 然后运行下面的命令来为您以前创build的实体类生成get和set方法

$ php app / console doctrine:generate:entities AppBundle:Meeting –no-backup

注2:作为最后一步,你必须删除xml doctrine orm db文件,例如src\AppBundle/Resources/config/doctrine/VisitorData.orm.xml

它对我来说效果很好。

有关解释请阅读: http : //symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html

@ fyrye目前隐藏的评论值得信任,想添加这个,所以不会被别人遗漏。 这是方法:

 /** @var \Doctrine\DBAL\Connection $connection */ $config = $connection->getConfiguration(); // for excluding an specific table $config->setFilterSchemaAssetsExpression('/^(table_to_reverse_engineer_1|table_to_reverse_engineer_2).*$/'); 

来源: https : //coderwall.com/p/jofhdw/doctrine-tell-which-tables-to-work-with

运行以下命令时,由于大量定义不准的旧表,我遇到了问题

 php ./vendor/bin/doctrine orm:convert-mapping --force --from-database annotation ./src/UI/Entity/ 

事实certificate, – 过滤标志只有在它读取了所有表中的元数据后才进行过滤,如果它们没有主键或者有其他问题,将导致命令失败

我会留下这个作为评论接受的答案,但我是一个新手。

对于像我这样的人来说,在使用名称中的重叠string映射多个表的过程中遇到了麻烦,可以使用一个模式。

示例表名称:

供应商供应商联系人

 php app/console doctrine:mapping:convert metadata_format \ ./src/App/MyBundle/Resources/config/doctrine \ --from-database \ --filter="Vendor" 

该命令将转换这两个表,而不是只供应商。 如果您只想要Vendor而不是VendorContact,请在–filter中使用一个模式:

 php app/console doctrine:mapping:convert metadata_format \ ./src/App/MyBundle/Resources/config/doctrine \ --from-database \ --filter="\bVendor\b" 

希望帮助别人!

Symfony 3也很好用。

如果您得到“没有要处理的元数据类”。 在filter参数中尝试将你的表名转换为Doctrine camel套接字。

“my_table_name”需要写为“MyTableName”。

我和Symfony 2.4和MySQL有完全一样的问题。

上面没有提到的解决方法都适用于我。

我最终创build了一个新的数据库与我想提取的表(这可以很容易做,因为MySQL提供了创build脚本)。

然后改变连接到新的数据库,并从那里执行实体提取命令。

似乎有点激进,但我不会手动创build实体。

希望有所帮助

没有工作任何这些为我的symfony 3.3。 所以我只是创build一个目录的副本,并重新生成复制目录中的所有实体。 然后我复制我原来的目录中所需的实体。

– 由于这个问题,filter不工作https://github.com/symfony/symfony/issues/7717

没有一个答案对我来说是非常适合使用Symfony 3的 。 我结束了:

 php bin/console doctrine:mapping:import --force MyBundle xml --filter="MyTable" php bin/console doctrine:mapping:convert annotation ./src --filter="MyTable" php bin/console doctrine:generate:entities AdminBundle:MyTable --path ./src 

只是一个简短的说明,出于某种原因,我必须运行教条:映射:转换命令两次,第一次给出错误,但第二次按预期运行