是否可以使用Symfony2控制台工具从数据库生成单个实体?
在编码过程中,我必须添加一个表,并对现有的实体类进行了修改。所以我不希望我的所有实体都重新生成。
任何建议都将不胜感激!
答案 0 :(得分:99)
我有同样的问题,你必须这样做:
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,annotation)
最后
php app/console doctrine:generate:entities AppMyBundle --no-backup
像这样的学说只会加载你需要的实体。只需要小心过滤器就必须使用CamelCase!
希望这会对你有所帮助
答案 1 :(得分:28)
对于第三个命令,doctrine不断重新生成所有Entity文件。通过在bundle之后添加实体名称,它只生成了我感兴趣的实体。
php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup
答案 2 :(得分:12)
Symfony 2.7选项注释和[/ xml / yml]的简单工作解决方案请参阅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
您需要在MyMeeting
中将其更改为filter="MyMeeting"
以获取教程以查找您的表名。是因为doctrine总是会删除下划线并将Camel-case添加到你的表名中。如果没有,你会收到这个错误:&#34;数据库没有任何映射信息&#34; 。)< / p>
$ php app/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="Meeting"
(注意:确保您的 Meeting.php 类文件中包含namespace AppBundle\Entity;
,如下所示:
<?php
/**
* Created by PhpStorm.
* User:
* Date: 03-Sep-2015
* Time: 3:23 PM
*/
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
如果不加入。)
其中:
请务必查看以下目录:
SRC \的appbundle /资源/配置/教义/ Meeting.orm.xml
确保您只有要创建实体类文件的表的.xml文件,而没有其他文件。然后运行以下命令为您先前创建的实体类生成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
答案 3 :(得分:8)
/** @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/
事实证明--filter标志仅在它从所有表中读取元数据后过滤,如果它们没有主键或有其他问题,将导致命令失败< / p>
答案 4 :(得分:4)
使用 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 MyBundle:MyTable --path ./src
答案 5 :(得分:3)
我会将此作为对已接受答案的评论,但我是新手。
对于那些像我这样的人来说 - 在映射中使用--filter开关映射多个具有重合字符串的表时,可以使用模式。
示例表名称:
供应商 VendorContact
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"
希望能帮助别人!
答案 6 :(得分:3)
也适用于Symfony 3。
如果您正在处理#34;没有元数据类来处理。&#34;消息尝试将您的tablename转换为过滤器参数中的Doctrine camel大小写。
&#34; MY_TABLE_NAME&#34;需要写成&#34; MyTableName&#34;。
答案 7 :(得分:3)
-filter使用实体名称,而不是表名称! php bin /控制台原则:映射:导入“ App \ Entity”注释--path = config / doctrine --filter =“ YourEntity”
答案 8 :(得分:1)
我与Symfony 2.4和MySQL有完全相同的问题。
上面发布的所有解决方法都不适用于我。
我最终创建了一个包含我想要提取的表的新数据库(这很容易做到,因为MySQL提供了创建脚本)。
然后更改了与该新数据库的连接,并从那里执行了实体提取命令。
似乎有点激进,但我不会手工创建实体。
希望有所帮助
答案 9 :(得分:0)
我没有为我的symfony 3.3工作。所以我刚创建了一个目录副本,并重新生成了copy目录中的所有实体。然后我在原始目录中复制了所需的实体。
- 由于此问题导致过滤器无效https://github.com/symfony/symfony/issues/7717
答案 10 :(得分:0)
Symfony 3
为新的“组”表生成实体
php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/AppBundle/Entity --filter Group
所写