Symfony 类表继承,存储库->;findByTypeId
我对Symfony和Doctrine非常陌生,我在尝试设置类表继承时遇到了一个问题。我有一个称为“TeamActionTarget”的父实体,还有两个称为“Player”和“Competition”的子实体。 我的父实体的模型如下所示:Symfony 类表继承,存储库->;findByTypeId,symfony,doctrine-orm,data-retrieval,discriminator,class-table-inheritance,Symfony,Doctrine Orm,Data Retrieval,Discriminator,Class Table Inheritance,我对Symfony和Doctrine非常陌生,我在尝试设置类表继承时遇到了一个问题。我有一个称为“TeamActionTarget”的父实体,还有两个称为“Player”和“Competition”的子实体。 我的父实体的模型如下所示: // src/Van/TeamsBundle/Entity/TeamActionTarget.php namespace Van\TeamsBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Van
// 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为我生成了一个父表,其中有两个字段“id”和“type_id”,还有两个子表,它们有自己唯一的字段。
我现在要做的是从表单中发布的整数值中按类型检索所有子项
因此,在控制器中,我编写了以下代码:
$em->getRepository('VanTeamsBundle:TeamActionTarget')->findByTypeId($targetType);
但是Symfony2返回了一个错误:
Entity“Van\TeamsBundle\Entity\TeamActionTarget”没有字段“typeId”
这是真的。实体模型不包含此字段,只有父类包含此字段。因此,我尝试在实体模型中添加此字段,但在尝试更新实体时出错,表示此字段与鉴别器之间存在冲突
我的问题很简单,如何从表单中按类型检索子类?使用单表继承时,必须直接使用子类的存储库:
$em->getRepository('VanTeamsBundle:Player')->findAll();
如果要检索依赖于表单的不同子实体,则必须使用实体别名(例如VanTeamsBundle:Player)作为表单字段值,并将其传递给getRepository()方法。另一种方法是使用在表单字段值和实体别名之间执行自定义映射。您必须设置一个从父项到子项的
@OnetoMany
关系我应该在哪里添加这个?在父实体或子实体中?在父实体中,您可以添加$TypeId和相应的getter和seter,请参阅octrine手册