Php Symfony2:列'的重复定义;id';字段或鉴别器列映射中的实体
在Symfony2中使用实体继承时遇到问题。以下是我的两门课:Php Symfony2:列'的重复定义;id';字段或鉴别器列映射中的实体,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,在Symfony2中使用实体继承时遇到问题。以下是我的两门课: use Doctrine\ORM\Mapping as ORM; /** * @Orm\MappedSuperclass */ class Object { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\Generate
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应用程序/控制台原则: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"})
*/
但我仍然收到相同的错误消息。任何实体都必须至少包含一个字段 必须在账簿实体中至少添加一个字段 示例
/**
* @Orm\MappedSuperclass
*/
class Book extends Object
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
}
实际上,我在Resources/config/doctor/中找到了yml文件,它们定义了我的实体,而不仅仅是使用注释 我删除了这些文件,现在可以正常工作了
谢谢你的帮助 我收到了相同的错误消息,但犯了不同的错误:
类B有一个ID,扩展类A也有一个ID(受保护,非私有)。因此,我不得不从类B中删除ID。即使在向yml文件添加定义之后,我也遇到了同样的问题。我试图在课堂上增加重量和最大重量,并得到:
字段或鉴别器列映射中实体“Model\ClientSuppliedProduct”上列“weight\u value”的重复定义。
然后我意识到类似类型的字段需要columnprix
不同,在yml中添加以下内容为我解决了这个问题:
`maxWeight:`
`class: Model\Weight`
`columnPrefix: max_weight_`
我有同样的问题和错误消息,但对我来说,这是另一种方式,如@user2090861所说 我不得不移除(未使用的) 从我的实体文件,因为我真正的映射来自orm.xml文件
我希望我能帮助其他许多人回答我的问题,因为这一例外在过去的两天里让我发疯 有时无法删除额外的配置文件,因为它们位于第三方包中,并且启用了
自动映射
在这种情况下,您应该在app/config.yml
doctrine:
orm:
entity_managers:
default:
mappings:
SonataMediaBundle: { mapping: false }
我在另一个上下文中遇到了这个问题-在我的例子中,我使用@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
种类定义
修复了这个问题,就像条令对我的定义一样。你在尝试多重继承吗?如果不是的话,我邀请你阅读这篇文章,尤其是黄色的方框。“MappedSuperclass不能是一个实体”你的回答也帮助了我!:)Symfony 3.1 FOSUser捆绑包。
/**
* @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;
}