我现在正在编写一个夹具加载器命令,我在其中生成一个带有orm.yml文件的mysql数据库,然后加载数据库装置。目前,loader 命令对于具有简单主键的表工作正常。但是现在我有一个表,它由一个复合的主键(三列)组成。两列("id"和"语言")是另一个表的外键(具有 1:n 关系)。
当我进行夹具加载器命令调用时,我收到此错误消息:
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看起来像这样:
EntityXyzint:
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
现在我有两个问题:
- 为什么字段"id"设置不正确(它仍然为空)?
- 复合主键的多对一关联是否正确?还是我必须使用"joinColumns"而不是"joinColumn"?当我有 要使用"joinColumns",你能给我一个简短的例子吗,如何 orm.yml-configuration应该看起来像?我找不到正确的 直到现在,在谷歌中回答。
感谢您的帮助。
我用以下解决方案解决了我的问题: 在表 xyzInt 中,我添加了一个新列,它现在用作新的简单主键。新列的值是 id、语言和名称的组合。列 id、语言和名称现在是普通列,已编入索引。
我对 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