是否可以使用Symfony2控制台工具从数据库生成单个实体?
在编码过程中,我不得不添加一个表格,并对现有实体类进行修改。因此,我不想重新生成所有实体。
欢迎提出任何建议!
我遇到了同样的问题,你需要这样做:
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
这样的教条只会加载你所需的实体。只要小心使用驼峰式过滤器即可!
希望这能对你有所帮助。
--filter="mytable"
,Doctrine 将选择以“mytable”开头的所有表格,而不仅仅是名为“mytable”的表格(我也曾遇到这个问题)。虽然我在这个问题上遇到了一些困难,但我很乐意帮助您。 - Snrokiwhateveryouwant
是什么? - Jake Berger第三个命令中,Doctrine 一直在重新生成所有实体文件。通过在 bundle 后添加实体名称,它只会生成我感兴趣的实体。
php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup
对于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
,则需要在 filter="MyMeeting"
中将其更改为 MyMeeting
,以便Doctrine找到您的表名。这是因为Doctrine始终会删除下划线并将驼峰式添加到您的表名中。如果没有更改,则会出现以下错误:“数据库没有任何映射信息”。)
$ 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;
如果不存在,请添加它。目前隐藏的@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/
原来,--filter标志只在读取所有表的元数据后进行过滤,如果这些表没有主键或存在其他问题,将导致命令失败。
setFilterSchemaAssetsExpression()
调用?你是修改 Symfony 或 Doctrine 的核心文件吗? - mHousesapp/config/config.yml
以包括schema_filter
选项,该选项调用setFilterSchemaAssetsExpression
。请参见:http://symfony.com/doc/current/reference/configuration/doctrine.html - Will B.doctrine: dbal: connections: user_db: schema_filter: /^(oauth_)/
- Alister Bulman在使用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
我本想把这个作为对已接受答案的评论,但我是新手。
对于像我一样在使用 --filter 开关时,由于表名中存在相同字符串而映射多个表格的人,可以使用模式。
例如,表名如下:
Vendor(供应商) VendorContact(供应商联系人)
php app/console doctrine:mapping:convert metadata_format \
./src/App/MyBundle/Resources/config/doctrine \
--from-database \
--filter="Vendor"
该命令将转换两个表而不仅仅是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。
如果您遇到“没有需要处理的元数据类”提示,请尝试将您的表名转换为Doctrine驼峰命名法并在filter参数中使用。
例如,“my_table_name”应该写成“MyTableName”。
针对Symfony 3
生成一个新的"Group"表的实体
最初的回答:
php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/AppBundle/Entity --filter Group
doctrine.dbal.connections.CONNECTION_NAME.schema_filter: ~^(table_prefix_name_).*~
或使用正则表达式跳过特定表格。 - Alister Bulman