我想在我的数据库中的2个实体之间设置FK。父表与子表具有ManyToOne关系。我无法使用正常的parent_id => id FK连接这些表,因为子表由外部进程填充(父母从不知道子的主ID)。主要ManyToOne W/O主要ID密钥
Doctrine接受如下所示的实体,但在尝试将FK添加到表时出现以下错误,但Mysql失败。
ALTER TABLE parent_tbl ADD CONSTRAINT FK_1172A832F85E0677 FOREIGN KEY (username) REFERENCES child_tbl (username);
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`dmname`.`#sql-f16_d8acf`, CONSTRAINT `FK_1172A832F85E0677` FOREIGN KEY (`username`) REFERENCES `child_tbl` (`username`))
class Parent
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Child")
* @ORM\JoinColumn(name="username", referencedColumnName="username", nullable=false)
*/
protected $username;
// ...
}
class Child
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*
* @var integer
*/
protected $id;
/**
* @ORM\Column(type="string", unique=true)
*
* @var string
*/
protected $username;
// ....
}
谢谢。根据我在文档中读到的内容,我担心这一点。我忘记了'doctrine:schema:validate'命令,你是对的,那正是我得到的错误。我会玩弄使用NativeQuery和RSM来看看我是否可以得到一些工作。否则,我只需单独获取子表。 – lifo
很高兴帮助你,我很惊讶地发现在mysql中确实会产生副作用。 – chalasr