64

是否可以使用 Symfony2 控制台工具从数据库生成单个实体?

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

任何建议将不胜感激!

4

11 回答 11

108

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

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

就像这个学说只会加载你需要的实体。请注意必须使用 CamelCase 的过滤器!

希望对你有帮助

于 2012-05-16T08:34:25.513 回答
29

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

php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup
于 2012-11-02T21:05:36.653 回答
14

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您将需要将其更改为MyMeetinginfilter="MyMeeting"以便于学说以找到您的表名。这是因为学说总是会去除下划线并将 Camel-case 添加到您的表名中。如果不是,您将收到此错误:“数据库没有任何映射信息”。)

$ 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;

如果没有添加它。)

在哪里:

  • AppBundle 正是您在 Symfony 2.7 中的“AppBundle”
  • 会议是目标表(区分大小写)

可以肯定的是,检查这个目录:

src\AppBundle/Resources/config/doctrine/Meeting.orm.xml

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

$ php 应用程序/控制台原则:生成:实体 AppBundle:会议 --no-backup

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

它对我来说效果很好。

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

于 2015-08-14T05:46:03.013 回答
9

@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 标志仅在它从所有表中读取元数据之后进行过滤,如果它们没有主键或有其他问题,将导致命令失败

于 2015-02-18T10:12:39.637 回答
6

对于使用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
于 2017-03-12T04:42:07.710 回答
3

--filter 使用实体名称,而不是表名称!php bin/console 原则:映射:导入“App\Entity”注解 --path=config/doctrine --filter="YourEntity"

于 2020-04-28T10:05:55.723 回答
3

我会将此作为对已接受答案的评论,但我是新手。

对于像我这样在使用 --filter 开关映射多个表的名称中具有重合字符串时遇到问题的人,可以使用一种模式。

示例表名:

供应商供应商联系方式

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"

希望对某人有所帮助!

于 2015-12-19T05:00:28.420 回答
3

也适用于 Symfony 3。

如果您收到“没有要处理的元数据类”。消息尝试在过滤器参数中将您的表名转换为 Doctrine 驼峰大小写。

“my_table_name”需要写成“MyTableName”。

于 2017-03-29T16:48:03.003 回答
2

Symfony 3

为新的“组”表生成实体

php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/AppBundle/Entity --filter Group

在此处输入图像描述

正如symfony 3 文档中所写

于 2019-07-05T12:24:40.947 回答
1

我在 Symfony 2.4 和 MySQL 上遇到了完全相同的问题。

上面发布的解决方法都不适合我。

我最终用我想要提取的表创建了一个新数据库(这很容易做到,因为 MySQL 提供了创建脚本)。

然后更改与该新数据库的连接并从那里执行实体提取命令。

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

希望有帮助

于 2015-10-30T13:39:54.977 回答
0

没有为我的 symfony 3.3 工作。所以我只是创建了一个目录副本并重新生成了副本目录中的所有实体。然后我在原始目录中复制了所需的实体。

--filter 由于这个问题而不起作用https://github.com/symfony/symfony/issues/7717

于 2017-08-23T05:09:03.580 回答