你如何订购与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 );
我想订购他们的电子邮件通知。 (多对多关系)。
谢谢大家。
答案 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 );