原则查询生成器 选择"不同"引发错误



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

[语义错误] 第 0 行,第 18 行,靠近"线程 FROM App\Entity\Message":错误:无效的路径表达式。必须是 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
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMManyToOne(targetEntity="AppEntityAd", inversedBy="messages")
* @ORMJoinColumn(nullable=true)
*/
private $ad;
/**
* @ORMManyToOne(targetEntity="AppEntityMessage")
*/
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('AppEntityMessage', '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('AppEntityMessage', '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('AppEntityMessage', 'm')
->where($queryBuilder->expr()->isNotNull('m.thread'))
->orderBy('m.thread', 'DESC')
->setMaxResults(10);
$query = $queryBuilder->getQuery();
$result = $query->getResult();
return $result;
}

相关内容

  • 没有找到相关文章

最新更新