使用Doctrine按子类字段排序

时间:2015-08-19 19:41:00

标签: php mysql symfony doctrine-orm doctrine

在Doctrine

中有一个基本的歧视地图

我们有一个基地" Post"实体,通过类似场景映射各种其他Post类型。这样做是因为每个类别都有一个截然不同的独特数据结构,但与每个帖子共享几列相似性。

我的问题是,特定的一些页面只想显示几个类别的结果,并且特定帖子类型的某些排序正在搞乱。

问题是,他们希望这种方式组织的方式是基础Post实体中的常见dateAdded字段,但对于INSTEAD的特定帖子类型,请使用不同的字段仅可用< / strong>通过它自己的架构中的字段来实现。此字段称为releasedDate

所以我尝试了这个:

public function postsByType($types = [], $limit = null, $onlyPublished = true)
{
    $qb = $this->getEntityManager()->createQueryBuilder();
    $qb->select('p')->from($this->getEntityName(), 'p');

    // Query for types. Without types, gets all types
    $instances = $qb->expr()->orX();
    foreach($types as $key=>$advtype){
        $instances->add("p INSTANCE OF :type_$key");
        $qb->setParameter("type_$key", $this->getEntityManager()->getClassMetadata('CommonBundle\Entity\\'.$advtype));
    }


    if($instances->count())
        $qb->andWhere($instances);

    if($onlyPublished)
        $qb->andWhere('p.published = :published')->setParameter('published', true);

    $qb->addOrderBy('p.releaseDate', 'DESC')
       ->addOrderBy('p.dateAdded', 'DESC');

    if($limit)
        $qb->setMaxResults($limit);

    $query = $qb->getQuery();
    $results = $query->getResult();

    return $results;
}

但自然会产生错误:

[Semantical Error] line 0, col 211 near 'releaseDate': Error: Class CommonBundle\Entity\Post has no field or association named releaseDate

除了提取所有帖子并对其进行自定义快速排序并返回所请求的结果外,我还不完全确定还有什么要做..

0 个答案:

没有答案