gpt4 book ai didi

php - 学说查询构建器 SELECT DISTINCT 抛出错误

转载 作者:行者123 更新时间:2023-11-29 16:55:15 25 4
gpt4 key购买 nike

这应该是直接的。我确实在 SO 和其他地方找到了很多关于这个主题的帖子,但它只是抛出错误:

[Semantical Error] line 0, col 18 near 'thread FROM App\Entity\Message': Error: Invalid PathExpression. Must be a 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();
}

谢谢

最佳答案

尝试这些解决方案之一,我认为您的问题是您没有使用查询生成器在解决方案中指定“来自”。您还可以从 createQueryBuilder() 函数中删除“m”,该函数不接收任何参数。我希望这些解决方案之一适合您。

解决方案1

public function getThreads(){
return $this->em->createQueryBuilder()
->select('DISTINCT m.thread')
->from('App\Entity\Message', 'm')
->where('m.thread IS NOT NULL')
->orderBy('m.thread', 'DESC')
->setMaxResults(10)
->getQuery()
->getResult();
}

解决方案2

public function getThreads(){
return $this->em->createQueryBuilder()
->select('m.thread')->distinct()
->from('App\Entity\Message', 'm')
->where('m.thread IS NOT NULL')
->orderBy('m.thread', 'DESC')
->setMaxResults(10)
->getQuery()
->getResult();
}

解决方案3

public function getThreads(){
$queryBuilder = $this->em->createQueryBuilder();
$queryBuilder->select('m.thread')->distinct()
->from('App\Entity\Message', 'm')
->where($queryBuilder->expr()->isNotNull('m.thread'))
->orderBy('m.thread', 'DESC')
->setMaxResults(10);

$query = $queryBuilder->getQuery();
$result = $query->getResult();
return $result;
}

关于php - 学说查询构建器 SELECT DISTINCT 抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52603721/

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