简体   繁体   English

ManyToOne作为教义上的ID(symfony2)

[英]ManyToOne as ID on doctrine (symfony2)

I'm developing a project with Symfony2 LTS and need to create Entities for doctrine. 我正在使用Symfony2 LTS开发一个项目,需要为该学说创建实体。 In my database model I have a OneToMany relation, that is part of the PK. 在我的数据库模型中,我有一个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    |     |                |
+--------------+---------+-----+----------------+

When I create a PHP Entity class only with id as @ORM\\Id tehre are no Problems, but when I try to add the ManyToOne as Id I get an error 当我只创建一个ID为@ORM\\Id tehre的PHP Entity类时没有问题,但是当我尝试将ManyToOne作为ID添加时,出现错误

[Doctrine\ORM\Mapping\MappingException]                                                 
  Single id is not allowed on composite primary key in entity MyBundle\Entity\MyChild

The Php class looks like this: 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;

You should remove the @ORM\\Id from the $parent and create a UniqueConstraint for $id and $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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM