Symfony 条令2中类之间的多个CTI(类表继承)?
我希望在Doctrine2中具有以下层次结构:Symfony 条令2中类之间的多个CTI(类表继承)?,symfony,doctrine,doctrine-orm,Symfony,Doctrine,Doctrine Orm,我希望在Doctrine2中具有以下层次结构: - Message - SMS - SentSMS - ScheduledSMS - FailedSMS - Newsletter - SystemComunication 但是,当我尝试在Symfony 2中生成实体时,会出现以下错误: [条令\ORM\Mappin\MappingException] 实体“Acme\HelloBundle\Entity\FailedSMS
- Message
- SMS
- SentSMS
- ScheduledSMS
- FailedSMS
- Newsletter
- SystemComunication
但是,当我尝试在Symfony 2中生成实体时,会出现以下错误:
[条令\ORM\Mappin\MappingException]实体“Acme\HelloBundle\Entity\FailedSMS”具有复合标识符 但使用ID生成器而不是手动分配(标识, 顺序)。这是不受支持的 我认为这是因为
FailedSMS
的id
(继承自Message
)与FailedSMS
本身应该有一个分配的id
,以便CTI(使用SMS
)工作的事实相冲突
我要的是月亮,还是有办法让它发挥作用?对层次结构的一点概述:
/**
* @ORM\Entity
* @ORM\Table(name="message")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({"newsletter" = "Newsletter", "sms" = "SMS"})
*/
class Message {}
/**
* @ORM\Entity
* @ORM\Table(name="newsletter")
*/
class Newsletter extends Message {}
/**
* @ORM\Entity
* @ORM\Table(name="sms")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="status", type="string")
* @ORM\DiscriminatorMap({"sent"="SentSMS", "scheduled"="ScheduledSMS",
* "failed"="FailedSMS"
* })
*/
class SMS extends Message {}
/**
* @ORM\Entity
* @ORM\Table(name="failed_sms")
*/
class FailedSMS extends SMS {}
在我看来,您实际上并不需要表“消息”。如果是这种情况,您应该将消息定义为映射的超类
<?php
namespace Your\Bundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\MappedSuperClass
*
*/
abstract class MappedSuperClassMessage
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Everything else you want the subclasses to have
*/
}
这不是一个经过测试的回复,所以我不确定您是否对此有问题。谢谢。映射的超类看起来不错,因为我真的不需要或使用消息实体。我要测试一下。
/**
* @ORM\Entity
* @ORM\Table(name="newsletter")
*/
class Newsletter extends MappedSuperClassMessage {}
/**
* @ORM\Entity
* @ORM\Table(name="sms")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="status", type="string")
* @ORM\DiscriminatorMap({"sent"="SentSMS", "scheduled"="ScheduledSMS",
* "failed"="FailedSMS"
* })
*/
class SMS extends MappedSuperClassMessage {}
/**
* @ORM\Entity
* @ORM\Table(name="failed_sms")
*/
class FailedSMS extends SMS {}