Doctrine 2 - 无法设置名为“id”的复合主键

时间:2017-03-21 15:36:13

标签: php doctrine-orm

我正在编写一个fixture loader命令,在那里我用orm.yml文件生成一个mysql数据库,然后加载数据库fixture。目前,loader命令对于具有简单主键的表正常工作。但是现在我有一个表,它由一个合成的主键(三列)组成。两列(“id”和“language”)是另一个表的外键(具有1:n关系)。

当我进行fixture loader命令调用时,我收到此错误消息:

Message: An exception occurred while executing 'INSERT INTO xyzInt (id, language, name, text, update, userID, complete) VALUES (?, ?, ?, ?, ?, ?, ?)' with params [null, "com", "peter", "text", "2017-03-06 18:00:00", 1, 0]:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update, userID, complete) VALUES (NULL, 'com', 'peter', 'text', '2017-03-' at line 1

我的xyzInt.orm.yml看起来像这样:

Entity\Xyzint:
  type: entity
  table: xyzInt

  id:
    id:        { type: integer, options: { default: 0, unsigned: true }, generator: { strategy: NONE } }
    language:  { type: string, length: 2, options: { default: '' }, generator: { strategy: NONE } }
    name:      { type: string, length: 30, options: { default: '' }, generator: { strategy: NONE } }

  fields:
    ...

  manyToOne:
    Abc:
      targetEntity: Abc
      inversedBy: Xyzint
      joinColumn:
        name: id
        referencedColumnName: abcID

现在我有两个问题:

  1. 为什么字段“id”设置不正确(它仍然为空)?
  2. 是否为复合主键正确地进行了manyToOne相关?或者我必须使用“joinColumns”而不是“joinColumn”吗?当我有 使用“joinColumns”你能给我一个简短的例子,如何 orm.yml配置应该是什么样的?我找不到正确的 直到现在才回答谷歌。
  3. Thanxs的帮助。

2 个答案:

答案 0 :(得分:1)

我用以下解决方案解决了我的问题: 在表xyzInt中,我添加了一个新列,现在用作新的简单主键。新列的值是id,language和name的组合。列id,语言和名称现在是普通列,它们被索引。

答案 1 :(得分:0)

我对Yaml并不满意,但我认为你应该将你的生成策略设置为自动。像这样:

id:        { type: integer, options: { default: 0, unsigned: true }, generator: { strategy: AUTO } }

strategy: NONE更改为strategy: AUTO

以下是YAML配置的文档: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/yaml-mapping.html