Doctrine加入4个实体并按日期时间排序

时间:2013-04-28 11:51:01

标签: mysql symfony join doctrine

我想加入4个实体,每个实体都有upload_datetime列。然后我想按日期时间列降序排序,只获得7条记录。

现在我有了这个:

return $this->getEntityManager()
            ->createQuery('SELECT a,v,p,q FROM SelfInspirationDomainBundle:Articles a, SelfInspirationDomainBundle:Videos v, SelfInspirationDomainBundle:Pictures p,SelfInspirationDomainBundle:Quotes q ORDER BY a.uploadDatetime DESC, v.uploadDatetime DESC, p.uploadDatetime DESC, q.uploadDatetime DESC')
            ->setMaxResults($limit)
            ->getResult();

但它似乎无法正常工作。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

一种选择是创建一个父类来封装共享功能,并使用Doctrine的Inheritance Mapping为这四个类中的每一个创建一个子类。

/**
 * @Entity
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"article" = "Artice", "video" = "Video", ...})
 */
class Asset
{
    /**
     * @ORM\Column(name="upload_datetime", type="datetime")
     */
    protected $upload_datetime;
}

/**
 * @ORM\Entity
 */
class Article extends Asset {
...
}

然后你可以进行如下查询:

$this->getEntityManager()
        ->createQuery('SELECT a FROM Bundle:Asset a ORDER by a.update_datetime');