【发布时间】:2016-02-09 14:45:49
【问题描述】:
我正在使用 Symfony2 LTS 开发一个项目,需要为学说创建实体。在我的数据库模型中,我有一个 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;
【问题讨论】:
-
MyChild 拥有复合主键是没有意义的。展示你是如何制作 foriegnId 的,或者看看一些 sql 基础知识。
-
我想开始为每个父母增加孩子的 ID,所以我需要它作为主键。例如,父母 1 可以有孩子 1-1、1-2、...,父母 2 可以有 2-1、2-2、2-3
-
Child::id 作为 auto-inc 究竟如何工作?玩弄 id 几乎总是比它更值得的麻烦。如果 2-2 被删除会怎样?要重新编号吗?
标签: php symfony doctrine-orm doctrine