【发布时间】:2018-08-10 03:14:22
【问题描述】:
我目前在学说中为我的一个实体使用单表继承。标题如下所示:
/**
* Flux
*
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({"flux" = "Flux", "news" = "FluxNews", "mission" = "FluxMission", "offer" = "FluxOffer", "survey" = "FluxSurvey", "linkedin" = "FluxLinkedin", "facebook" = "FluxFacebook", "youtube" = "FluxYoutube", "twitter" = "FluxTwitter"})
* @ORM\Entity(repositoryClass="AppBundle\Repository\FluxRepository")
*/
class Flux
{
protected $type = "flux";
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/* other fields */
}
我正在尝试在通量存储库中创建一个函数,该函数将从所有通量对象中获取数据。我要收集的重要数据之一是对象的类型(鉴别器字段),以了解它是什么类型的对象。
在我的存储库中,我的选择类似于:
$queryBuilder->select('f.id', 'f.type', 'f.createdAt', 'IDENTITY(f.createdBy) as CreatedBy','COUNT(DISTINCT c.id) as allClicks', 'COUNT(DISTINCT IDENTITY(c.clicker)) as clicks', 'f.postUrl')
->groupBy('f.id');
f 是flux。如果我删除 'f.type' 它可以正常工作,但我需要该数据。
如果我保留'f.type',我会收到以下错误:
[Semantical Error] line 0, col 15 near 'type, f.createdAt,': Error: Class AppBundle\Entity\Flux\Flux 没有名为 type 的字段或关联
我猜是因为类型是鉴别器字段,它不在普通字段中。有没有办法让我访问存储库中的数据?
我可以在我的控制器中访问,但我真的很想保持我的代码干净,并在存储库中对这些数据进行所有查询。 到目前为止我看到的唯一选择是创建另一个字段,juste保存相同的类型但它真的不干净,我想知道是否有一种方法可以使用学说来获取这个字段的值。
【问题讨论】:
标签: php doctrine symfony-2.8