如何使用doctrine和symfony2从数据库视图生成实体

时间:2012-03-23 03:19:29

标签: symfony doctrine-orm

我正在尝试使用标准控制台命令从数据库生成实体,如Symfony2文档中所述:http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html

php app/console doctrine:mapping:convert --from-database --force yml "src/My/HomeBundle/Resources/config/doctrine/metadata/orm"
php app/console doctrine:mapping:import MyHomeBundle yml
php app/console doctrine:generate:entities MyHomeBundle

在此之后,所有表都正确生成。问题是这不会为数据库视图生成实体。当我自己将yml文件添加到src / My / HomeBundle / Resources / config / doctrine / metadata / orm中时,例如:

UserInGroup:
  type: entity
  table: user_in_group_view
  fields:
    id:
      id: true
      type: integer
      unsigned: false
      nullable: false
      generator:
        strategy: IDENTITY
    userId:
      type: integer
      unsigned: false
      nullable: false
      column: user_id
    userGroupId:
      type: integer
      unsigned: false
      nullable: false
      column: user_group_id
  lifecycleCallbacks: {  }

运行php app/console doctrine:generate:entities MyHomeBundle时出现此异常:

Notice: Undefined index: My\HomeBundle\Entity\UserInGroup in C:\Users\ThisIsMe\Projects\SymfonyTestProject\vendor\doctrine\lib\Doctrine\ORM\Mapping\Driver\AbstractFileDriver.php line 121

此处发布了类似问题:How to set up entity (doctrine) for database view in Symfony 2

我知道我可以创建Entity类,但是我希望能够生成这个,所以如果我改变了我的视图,我就可以重新生成实体类。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

现在您只创建自己的orm文件。您需要再执行2个步骤。我会从开始给你完整的步骤。

在此之前删除您早期创建的orm目录中的所有yml文件。

我希望MyHomeBundle是你的包名

1).php app/console doctrine:mapping:convert yml ./src/My/HomeBundle/Resources/config/doctrine --from-database --force 

  Symfony2 generate entity from Database

 2).php app/console doctrine:mapping:import MyHomeBundle yml

 3).php app/console doctrine:generate:entities MyHomeBundle

希望这会对你有所帮助。

答案 1 :(得分:0)

遇到同样的问题,我使用的是xml而不是yml,但必须是相同的。

如果名称包含正确的路线,请检查您的orm实体,例如:

<entity name="Myapp\MyrBundle\Entity\MyEntity" table="myentity">

因为当我从数据库生成我的orm时,名称就是这样:

<entity name="MyEntity" table="myentity">

所以学说不明白正确的道路。

希望我很清楚,这对你有帮助!

答案 2 :(得分:-1)

正如你在这里看到的: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html 从db到实体的逆向工程过程尚未完全实现:

“正如Doctrine工具文档所说,逆向工程是一个开始项目的一次性过程.Protrine能够根据字段,索引和外键约束转换大约70-80%的必要映射信息。教义不能发现反向关联,继承类型,具有外键作为主键的实体或对诸如级联或生命周期事件之类的关联的语义操作。之后需要对生成的实体进行一些额外的工作以设计每个以适合您的域模型特异性“。