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