Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 条令2中类之间的多个CTI(类表继承)?_Symfony_Doctrine_Doctrine Orm - Fatal编程技术网

Symfony 条令2中类之间的多个CTI(类表继承)?

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

我希望在Doctrine2中具有以下层次结构:

- 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 {}