php – Query Builder和Group By在Symfony2 / Doctrine两列产生
发布时间:2020-12-13 16:28:14 所属栏目:PHP教程 来源:网络整理
导读:我正在创建一个消息包,其中消息按联系人分组.在我的索引页面上,我显示不同的线程.当您在一个线程上,它显示您和您的联系人之间交换的所有消息.我使用查询生成器来显示索引页面上的线程: $qb = $this-createQueryBuilder('m') -where('m.from = ?1 or m.to =
我正在创建一个消息包,其中消息按联系人分组.在我的索引页面上,我显示不同的线程.当您在一个线程上,它显示您和您的联系人之间交换的所有消息.我使用查询生成器来显示索引页面上的线程:
$qb = $this->createQueryBuilder('m') ->where('m.from = ?1 or m.to = ?1') ->groupBy('m.to,m.from') ->orderBy('m.date','DESC') ->setParameter(1,$user->getId()) ->setMaxResults($pagination) // limit ->setFirstResult($pagination * $page) // offset ; 如果我有3个条目,例如: +----+------+----+ | id | from | to | +----+------+----+ | 1 | 1 | 2 | +----+------+----+ | 2 | 2 | 1 | +----+------+----+ | 3 | 1 | 2 | +----+------+----+ 我预计: +----+------+----+ | id | from | to | +----+------+----+ | 3 | 1 | 2 | +----+------+----+ 但我得到: +----+------+----+ | id | from | to | +----+------+----+ | 2 | 2 | 1 | +----+------+----+ | 3 | 1 | 2 | +----+------+----+ 我发现了一种使用SQL的方法,对于from_id和to_id使用相同的别名: SELECT id,from_id as c,to_id as c FROM Message WHERE c = 1 GROUP BY from_id,to_id 但是我不知道怎么用原则去做. 编辑: 直到我得到一个更好的主意,我使用一个键轻松地“分组”. // entity /** * @ORMColumn(name="key",type="string",length=40) */ private $key; /** * @ORMPrePersist() */ public function setOnPrePersist() { if($this->from < $this->to) { $key = $this->from . 't' . $this->to; } else { $key = $this->to . 't' . $this->from; } $this->key = $key; } // query builder $qb = $this->createQueryBuilder('m') ->where('m.from = ?1 or m.to = ?1') ->groupBy('m.key') ->orderBy('m.date',$user->getId()) ->setMaxResults($pagination) // limit ->setFirstResult($pagination * $page) // offset ; return $qb->getQuery()->getResult();
尝试以下它使用doctrine DQL方法 –
$query = $em->createQuery("SELECT m.id,m.from_id as c,m.to_id as c FROM AcmeDemoBunlde:Message as m WHERE m.c = 1 GROUP BY m.from_id,m.to_id"); $messageDetails = $query->getResult(); 而不是AcmeDemoBundle替换为适当的包名称. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读