gpt4 book ai didi

php - Symfony2/Doctrine 中两列的查询生成器和分组依据生成重复项

转载 作者:IT王子 更新时间:2023-10-29 00:13:23 26 4
gpt4 key购买 nike

我正在创建一个消息包,消息按联系人分组。在我的索引页面上,我显示不同的线程。当您点击一个线程时,它会显示您和您的联系人之间交换的所有消息。我使用查询生成器在我的索引页面上显示线程:

$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

但我不知道如何用 Doctrine 来做。

编辑:

在我有更好的想法之前,我使用一个键来轻松地“分组依据”。

// entity

/**
* @ORM\Column(name="key", type="string", length=40)
*/
private $key;

/**
* @ORM\PrePersist()
*/
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', 'DESC')
->setParameter(1, $user->getId())
->setMaxResults($pagination) // limit
->setFirstResult($pagination * $page) // offset
;

return $qb->getQuery()->getResult();

最佳答案

如果“分组依据”中有很多列,则必须使用 addGroupBy() 方法。

$qb = $this->createQueryBuilder('m')
->where('m.from = ?1 or m.to = ?1')
->groupBy('m.to')
->addGroupBy('m.from')
->orderBy('m.date', 'DESC')
->setParameter(1, $user->getId())
->setMaxResults($pagination) // limit
->setFirstResult($pagination * $page) // offset
;

:)

关于php - Symfony2/Doctrine 中两列的查询生成器和分组依据生成重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30458347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com