我对 Symfony 和 Doctrine 还很陌生,我在尝试设置类表继承时遇到了问题。我有一个名为“TeamActionTarget”的父实体,以及两个名为“Player”和“Competition”的子实体。我的父实体的模型如下:
// src/Van/TeamsBundle/Entity/TeamActionTarget.php
namespace Van\TeamsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Van\TeamsBundle\Entity\TeamActionTarget
*
* @ORM\Entity
* @ORM\Table(name="van_teams_actions_targets")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type_id", type="integer")
* @ORM\DiscriminatorMap( {"1" = "Competition", "2" = "Player"} )
*/
abstract class TeamActionTarget
{
/**
* @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;
}
}
Doctrine2 为我生成了一个父表,其中包含 2 个字段“id”和“type_id”,以及 2 个子表,它们具有自己的独特字段。我现在要做的是从表单发布的整数值中按类型检索所有子项。
所以在控制器中,我编写了这个:
$em->getRepository('VanTeamsBundle:TeamActionTarget')->findByTypeId($targetType);
但是 Symfony2 向我返回一个错误: 实体“Van\TeamsBundle\Entity\TeamActionTarget”没有字段“typeId” 这是真的。实体模型不包含该字段,只有父类包含。所以我尝试在实体模型中添加这个字段,但是在尝试更新实体时出现错误,说这个字段和鉴别器之间存在冲突。
我的问题很简单,如何按类型检索我的孩子,从表单发布?