学说2如何按顺序排列多对多的关系?

时间:2014-08-02 01:38:45

标签: php symfony doctrine-orm many-to-many dql

你如何订购与Doctrine2的多对多关系。 我想知道这是怎么可能的。

如果没有,你有什么建议?我想避免多次请求做一个巨大的foreach。

这是我到目前为止所做的:

    $qb = $this->getEntityManager()->createQueryBuilder();

    $qb->select( 'p', 'e', 'un', 'i', 'c' )
        ->from( 'Entity\Event',  'e' )
        ->leftJoin( 'e.place', 'p' )
        ->leftJoin( 'e.userNotified', 'un' )
        ->leftJoin( 'e.invitations', 'i', 'WITH', 'i.friend = :user' )
        ->innerJoin( 'e.categories', 'c', 'WITH', 'c.parent = :cat' )
        ->orderBy('e.dateStart', 'ASC')
        ->setFirstResult( $offset )
        ->setMaxResults( $limit );

我想订购他们的电子邮件通知。 (多对多关系)。

谢谢大家。

2 个答案:

答案 0 :(得分:1)

您可以使用以下注释对多个实体进行排序:

 /**
 * ...
 * @ORM\OrderBy({"some_attribute" = "ASC", "another_attribute" = "ASC"})
 */

 private $yourAttribute;

所以你只需要对你的属性进行查询,它们就已经按你想要的方式排序了;)

答案 1 :(得分:1)

我通常不使用构建器(我更喜欢写出DQL),但我相信这应该可行(我在DQL中也有类似的东西)。

$qb = $this->getEntityManager()->createQueryBuilder();

$qb->select( 'p', 'e', 'un', 'i', 'c', 'COUNT(e) AS HIDDEN counter' )
    ->from( 'Entity\Event',  'e' )
    ->leftJoin( 'e.place', 'p' )
    ->leftJoin( 'e.userNotified', 'un' )
    ->leftJoin( 'e.invitations', 'i', 'WITH', 'i.friend = :user' )
    ->innerJoin( 'e.categories', 'c', 'WITH', 'c.parent = :cat' )
    ->orderBy('e.dateStart', 'ASC')
    ->orderBy('counter ASC')
    ->setFirstResult( $offset )
    ->setMaxResults( $limit );