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

Set*_*ath 57 php database doctrine symfony

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

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

任何建议将不胜感激!

Snr*_*oki 101

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

php app/console doctrine:mapping:convert metadata_format \
    ./src/App/MyBundle/Resources/config/doctrine \
    --from-database \
    --filter="Yourtablename"
Run Code Online (Sandbox Code Playgroud)

然后

php app/console doctrine:mapping:import AppMyBundle \
    metadata_format --filter="Yourtablename"
Run Code Online (Sandbox Code Playgroud)

metadata_format您要生成的文件结尾在哪里(例如xml,yml,annotation)

最后

php app/console doctrine:generate:entities AppMyBundle --no-backup
Run Code Online (Sandbox Code Playgroud)

像这样的学说只会加载你需要的实体.只需要小心过滤器就必须使用CamelCase!

希望对你有帮助

  • 我很高兴,在这个问题上我遇到了一些不好的时光.只要小心过滤器,这是非常"明智的",就像你设置`--filter ="mytable"`doctrine将把所有表开始于"mytable"而不只是名为"mytable"的表(也有这个问题). (12认同)
  • 如果数据库包含没有主键的表,则这似乎不起作用,即使您的过滤器包含具有主键的表也是如此.有任何想法吗? (11认同)
  • 什么是'whateveryouwant`? (7认同)
  • @Coussinsky这有用,除了我有一个小问题: - filter = MyTable不起作用.如果我删除选项,我将获得数据库中的所有表,如果我添加选项,我会得到:"没有要处理的元数据类.",思考?http://stackoverflow.com/questions/13629959/generate-entities-with-doctrine-into-separate-namespace (2认同)
  • 你忘了"你要这样写:--filter ="MyTable" (2认同)

jpb*_*jpb 28

对于第三个命令,doctrine不断重新生成所有Entity文件.通过在bundle之后添加实体名称,它只生成了我感兴趣的实体.

php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup
Run Code Online (Sandbox Code Playgroud)

  • 实际上,如果我使用这个命令,我有`Namespace'VENDOR\MyBundle\Entity\TableName"不包含任何映射的实体."如果我使用完整的`doctrine:generate:entities`它会重新生成我的所有实体除了新的...我做错了什么?! (3认同)
  • 它应该包含在最佳答案中,因为Doctrine重新生成了所有~300个实体. (2认同)
  • 这对我来说也不起作用.它从我的所有包中生成实体. (2认同)

Dun*_*ung 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"
Run Code Online (Sandbox Code Playgroud)

(注:如果你的数据库名称是my_meeting您需要将其更改为MyMeetingfilter="MyMeeting".教义找到你的表名.这是因为学说总会剥去下划线和骆驼的情况下添加到您的表名如果没有,你会得到这个错误. :"数据库没有任何映射信息".)

$ php app/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="Meeting"
Run Code Online (Sandbox Code Playgroud)

(注意:确保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;
Run Code Online (Sandbox Code Playgroud)

如果没有添加.)

哪里:

  • AppBundle正是Symfony 2.7中的"AppBundle"
  • 会议是目标表(Camel-Case敏感)

请务必检查以下目录:

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


Car*_*ton 8

@ 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).*$/');
Run Code Online (Sandbox Code Playgroud)

来源: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/
Run Code Online (Sandbox Code Playgroud)

事实证明,--filter标志仅在它从所有表中读取元数据后过滤,如果它们没有主键或有其他问题,将导致命令失败

  • @mHouses 在 Symfony2.3+ 中,编辑 `app/config/config.yml` 来包含调用 `setFilterSchemaAssetsExpression` 的 `schema_filter` 选项会更容易,请参阅:http://symfony.com/doc/current/reference/配置/doctrine.html (2认同)

Bre*_*mas 5

使用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
Run Code Online (Sandbox Code Playgroud)