Symfony 1.4 Doctrine MySQL数据库表视图模块

时间:2011-05-18 18:49:01

标签: symfony-1.4

使用symfony 1.4和doctrine,您可以在项目目录中使用此命令生成前端页面/模块: php symfony doctrine:generate-module --with-show --non-verbose-templates frontend tablename tableclassname

这适用于实际表,但是当我尝试在MySQL DB View而不是MySQL DB Table上运行此命令时,我收到此错误:无法为没有主数据库的模型生成模块密钥。视图从它正在读取的表中继承主键,是我的理解。

有没有人知道这方面的工作,使用symfony仍然很容易维护?如果我可以将数据库视图与symfony框架一起使用,那就太棒了。如果您需要更多详细信息,请与我们联系。一般来说,无论多么复杂或简单,任何观点似乎都无效。

P.S。我尝试编辑./config/doctrine/schema.yml文件,将视图中的id列更改为主键,它位于实际的表格中。尝试在symfony中生成前端模块时,我仍然遇到相同的错误。

tableName: v_tablename
 columns:
  id:
  type: integer(4)
  fixed: false
  unsigned: false
  primary: true --> This used to be primary: false
  default: '0'
  notnull: true
  autoincrement: false

* K我明白了,但自从我成为新用户以来,直到8小时后才发布我的答案。 当我编辑schema.yml文件时,我在那里是1/2。如果你试图从一个视图生成一个模块,并且你已经在symfony之外构建了你的数据库模型,比如说使用MySQL Workbench,那么你必须使用doctrine来构建你的模式,然后在现有数据库结构的symfony中构建你的模型,如下所示:

1 - php symfony doctrine:build-schema (这会生成schema.yml文件等)但是如果在数据库模式中有视图,则不会在schema.yml文件。手动编辑并将primary:false更改为primary:相应地在您需要的位置更改。

2 - php symfony doctrine:build-model 在添加主键后执行第2步后,您就可以成功生成模块

3 - php symfony doctrine:generate-module frontend module model

1 个答案:

答案 0 :(得分:1)

小修正......这会有效,但我错过了2& 2之间的一步。 3影响表格页面并打破了第1步。

1 - php symfony doctrine:build-schema (这会生成schema.yml文件等)

2 - 编辑./config/doctrine/schema.yml 文件。对于视图定义,请将primary:false更改为primary:true,根据需要将其更改为true。我也注意到在MySQL中,因为boolean = tinyint(1),schema.yml检测整数(1)而不是布尔值。您也可以将integer(1)数据类型更改为您需要的布尔值。

tableName: v_tablename
   columns:
     id:
     type: integer(4)
     fixed: false
     unsigned: false
     primary: false --> change to, primary: true
     default: '0'
     notnull: true
     autoincrement: false

tableName: tablename
   columns:

     active:
     type: integer(1) --> change to, type: boolean
     fixed: false
     unsigned: false
     primary: false
     default: '0'
     notnull: true
     autoincrement: false

3 - php symfony doctrine:build-model

4 - php symfony doctrine:build-forms

5 - php symfony doctrine:generate-module frontend module