实体(...)未指定标识符/主键。每个实体必须有一个标识符/主键。

17

我有一个Peticion实体,但是出现了以下错误,似乎缺少一些东西:

No identifier/primary key specified for Entity (...) Every Entity must have and identifier/primary key

这是实体代码:

<?php

namespace Project\UsuarioBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Peticion
 *
 * @ORM\Table(name="peticion")
 * @ORM\Entity
 */
class Peticion
{
    /**
     *
     * @ORM\Id
     * @ORM\ManyToMany(targetEntity="Project\UsuarioBundle\Entity\Usuario", inversedBy="usuNick2")
     * @ORM\JoinTable(name="USUARIO",
     *      joinColumns={@ORM\JoinColumn(name="USU_NICK_1", referencedColumnName="USU_NICK")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="USU_NICK_2", referencedColumnName="USU_NICK")}
     *      )
     */
    private $usuNick1;

    /**
     *
     * @ORM\Id
     * @ORM\ManyToMany(targetEntity="Project\UsuarioBundle\Entity\Usuario", mappedBy="usuNick1"))
     */
    private $usuNick2;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="PET_FECHA", type="date", nullable=false)
     */
    private $fecha;
3个回答

20

您需要指定 id字段,并删除其他@ORM\Id注释。请查看Doctrine文档中的标识符/主键部分。

每个实体类都需要一个标识符/主键。您可以使用@Id标记注释来指定用作标识符的字段。

/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

10
这是不正确的,Doctrine 应该能够处理复合主键(多个 ID),而且变量不一定需要是 $id - Ryall
2
我发现 @ORM\Column(type="integer") 是至关重要的。我正在使用 Doctrine 2.7。 - Gogowitsch

2

解决方案是在EntityName.orm.yml文件中添加id字段 id: true 例如:

AppBundle \ Entity \ Supplier:
   type: entity
   table: sylius_supplier
   fields:
     id:
       type: integer
       id: true
       generator:
         strategy: AUTO
     name: .......

0
在我的情况下,发生的情况如下:
我创建了实体文件,并将其放置在具有数据库模式的实体目录中。
但问题在于,我还创建了一个 YML 文件用于实体,并将其放置在 Resources/config/doctrine 中,没有包含模式。Symfony 在 YML 文件中查找模式。删除 YML 文件后,实体文件中的模式正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接