我想在理论上实现一个非常简单的查询,但我没有设法让它工作:我想要按 Elo 分组的活动 CV 的数量(这是继承表中的一个属性)。
错误:
[语义错误] 第 0 行,第 22 列,靠近 'elo FROM MyNamespace\CvBundle\Entity\Cv':
错误:MyNamespace\CvBundle\Entity\Cv\Feature 类没有名为 elo 的字段或关联。
它抱怨没有一个字段MyNamespace\CvBundle\Entity\Cv\Feature
为真,因为它是“主”表。该字段包含在MyNamespace\CvBundle\Entity\Cv\Lol
哪个表中继承自Cv\Feature
这是查询:
// CvRepository.php
public function getStats()
{
$query = $this->createQueryBuilder('c')
->select('COUNT(f.id), f.elo')
->leftJoin('c.feature', 'f')
->groupBy('f.elo')
->where('f INSTANCE OF MyNameSpace\CvBundle\Entity\Cv\Lol')
->andWhere('c.active = :active')
->andWhere('c.expiresAt > :now')
->setParameters(array(
'now' => new \DateTime("now"),
'active' => 1,
))
->getQuery();
return $query->execute();
}
和表 Cv:
// Cv.php
/**
* @ORM\Table(name="cv")
* @ORM\Entity(...)
*/
class Cv
{
/**
* @ORM\OneToOne(targetEntity="MyNameSpace\CvBundle\Entity\Cv\Feature", cascade={"all"})
*/
protected $feature;
}
Feature.php
/**
* @ORM\Entity()
* @ORM\Table(name="cv_feature")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({"lol" = "Lol", ...})
*/
abstract class Feature
{
/**
* @ORM\OneToOne(targetEntity="MyNameSpace\CvBundle\Entity\Cv")
* @ORM\JoinColumn(name="cv_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $cv;
还有 Lol.php
/**
* @ORM\Entity()
*/
class Lol extends Feature
{
/**
* @var integer $elo
*
* @ORM\Column(name="elo", type="string")
*/
private $elo;
....