6

我在 Symfony2 中使用实体继承时遇到问题。这是我的两门课:

use Doctrine\ORM\Mapping as ORM;

/**
 * @Orm\MappedSuperclass
 */
class Object
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
}


/**
  * @Orm\MappedSuperclass
 */
class Book extends Object
{
}

当我运行php app/console dictionary:schema:create时,我收到以下错误:

[Doctrine\ORM\Mapping\MappingException]  
Duplicate definition of column 'id' on entity 'Name\SiteBundle\Entity\Book' in a field or discriminator column mapping.

这可能是什么原因造成的?

谢谢 :)

更新:

你是对的,我错过了这个。现在我使用单表继承,两个类都是实体:

/**
 * @Entity
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"object" = "Object", "book" = "Book"})
 */

但我仍然收到相同的错误消息。

4

7 回答 7

8

实际上,我在 Resources/config/doctrine/ 中找到了定义我的实体的 yml 文件,而不仅仅是使用注释。

我删除了这些文件,它现在可以工作了。

谢谢你的帮助 !

于 2013-10-17T09:41:18.607 回答
2

即使在将定义添加到 yml 文件后,我也遇到了同样的问题。我试图在课程中添加重量和最大重量,并得到:

Duplicate definition of column 'weight_value' on entity 'Model\ClientSuppliedProduct' in a field or discriminator column mapping.

然后我意识到columnPrefix类似类型的字段需要不同,并在 yml 中添加以下内容为我解决了这个问题:

`maxWeight:`
  `class: Model\Weight`
  `columnPrefix: max_weight_`
于 2016-10-27T23:47:57.123 回答
2

我遇到了同样的问题和错误消息,但对我来说,就像@user2090861 所说的相反。

我不得不删除(未使用的)

use Doctrine\ORM\Mapping as ORM;

来自我的实体文件,因为我的真实映射来自 orm.xml 文件。

我希望我能帮助很多人回答我的问题,因为这个异常在过去两天让我发疯了!

于 2016-12-02T08:51:29.793 回答
1

有时无法删除额外的配置文件,因为它们位于第三方捆绑包中并且auto_mapping已启用。

在这种情况下,您应该禁用不需要的映射app/config.yml

doctrine:
orm:
    entity_managers:
        default:
            mappings:
                SonataMediaBundle: { mapping: false }
于 2017-03-27T15:20:08.737 回答
1

我在不同的上下文中遇到了这个问题——在我的例子中,我使用 为单表继承设置了一个实体@ORM\DiscriminatorColumn,但也在我的类定义中包含了该列:

/**
 * @ORM\Entity(repositoryClass="App\Repository\DirectoryObjectRepository")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="kind", type="string")
 */
class DirectoryObject {
    // ...
    /**
     * @ORM\Column(type="string", length=255)
     */
    private $kind;
}

删除已修复此问题的@ORM\Column定义kind,正如 Doctrine 为我定义的那样。

于 2019-08-14T10:11:24.270 回答
0

任何实体必须至少包含一个字段。

您必须在 Book Entity 中添加至少一个字段

例子

/**
 * @Orm\MappedSuperclass
*/
class Book extends Object
{
 /**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
  private $id;
}
于 2013-10-17T06:48:03.110 回答
0

我有同样的错误信息,但我犯了一个不同的错误:

B 类有一个 ID,而扩展的 A 类也有一个 ID(受保护,非私有)。所以我不得不从 B 类中删除 ID。

于 2014-09-25T13:50:26.510 回答