【发布时间】:2018-10-02 07:25:14
【问题描述】:
这应该是直截了当的。我确实在 SO 和其他地方找到了一些关于这个主题的帖子,但它只是抛出了错误:
[语义错误] 第 0 行,第 18 列“线程 FROM App\Entity\Message”附近:错误:无效的 PathExpression。必须是 StateFieldPathExpression。
这用于在消息模块上选择不同的线程。我尝试的查询是:
public function getThreads() {
return $this->createQueryBuilder('m')
->select('DISTINCT m.thread')
->where('m.thread IS NOT NULL')
->orderBy('m.thread', 'DESC')
->setMaxResults(10)
->getQuery()
->getResult();
消息实体:
class Message
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Ad", inversedBy="messages")
* @ORM\JoinColumn(nullable=true)
*/
private $ad;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Message")
*/
private $thread;
.....
公平地说,我确实设法让它与 DQL 一起工作,但是,你知道,我似乎无法让它不使用查询生成器解决。
顺便说一下,这里是 DQL:
public function getThreads() {
$query = $this->em->createQuery(
'SELECT DISTINCT(m.thread) FROM App:Message m
WHERE m.thread IS NOT NULL
ORDER BY m.thread DESC
LIMIT 10 ');
return $query->getResult();
}
谢谢
【问题讨论】:
-
您是否尝试过按照Doctrine's QueryBuilder documentation 的示例使用QueryBuilder 的
->distinct()方法:$qb = $em->createQueryBuilder() ->select('u') ->distinct() ->from('User', 'u');? -
我试过了,像这样:`$this->createQueryBuilder('m') ->select('m.thread') ->distinct()`,但它抛出了同样的错误。此外,在这样做时,没有地方可以告诉学说哪一列应该是不同的。
-
哎呀...我的立场是正确的。与我在
select('m.thread)上面的评论中所说的相反,它告诉学说哪一列应该是不同的。不过没关系,错误依然存在。
标签: php mysql doctrine-orm symfony4