我正在使用 Symfony2 LTS 开发一个项目,需要为 Doctrine 创建实体。在我的数据库模型中,我有一个 OneToMany 关系,它是 PK 的一部分。
Parent
+-------+--------------+-----+----------------+
| Field | Type | Key | Extra |
+-------+--------------+-----+----------------+
| id | int(11) | PRI | auto_increment |
| name | varchar(255) | | |
+-------+--------------+-----+----------------+
MyChild
+--------------+---------+-----+----------------+
| Field | Type | Key | Extra |
+--------------+---------+-----+----------------+
| id | int(11) | PRI | auto_increment |
| foreignId | int(11) | PRI | |
| other_fields | text | | |
+--------------+---------+-----+----------------+
当我创建一个仅 ID 为 @ORM\Id
的 PHP 实体类时,没有问题,但是当我尝试添加 ManyToOne 作为 Id 时,出现错误
[Doctrine\ORM\Mapping\MappingException]
Single id is not allowed on composite primary key in entity MyBundle\Entity\MyChild
Php 类如下所示:
class MyChild
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var MyParent
*
* @ORM\Id
* @ORM\ManyToOne(targetEntity="MyParent", inversedBy="childs")
* @ORM\JoinColumn(name="foreignId", referencedColumnName="id")
*/
private $parent;
最佳答案
您应该从 $parent 中删除 @ORM\Id 并为 $id 和 $parent 创建一个 UniqueConstraint。
/**
* @ORM\Table(uniqueConstraints={
* @ORM\UniqueConstraint(
* columns={"id", "foreignId"}
* )
* })))
*/
class MyChild
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var MyParent
*
* @ORM\ManyToOne(targetEntity="MyParent", inversedBy="childs")
* @ORM\JoinColumn(name="foreignId", referencedColumnName="id")
*/
private $parent;
关于php - ManyToOne 作为 Doctrine 上的 ID (symfony2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35294922/