学说 QueryBuilder 返回 QueryException

Posted

技术标签:

【中文标题】学说 QueryBuilder 返回 QueryException【英文标题】:Doctrine QueryBuilder returns QueryException 【发布时间】:2013-05-23 18:00:15 【问题描述】:

我正在尝试使用 Doctrine QueryBuilder 获取我的页面实体。我已经成功实现了 ORM,它毫无问题地生成了我的数据库。现在我想从数据库中获取实体,它似乎返回了一个 QueryException

Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException' with message 'SELECT page FROM Website\Model\Body\Page page WHERE page.isActive = 1' in path\to\orm\Doctrine\ORM\Query\QueryException.php:39 
Stack trace: 
#0 path\to\orm\Doctrine\ORM\Query\Parser.php(429): Doctrine\ORM\Query\QueryException::dqlError('SELECT page FRO...') 
#1 path\to\orm\Doctrine\ORM\Query\Parser.php(854): Doctrine\ORM\Query\Parser->semanticalError('Class 'Website\...', Array) 
#2 path\to\orm\Doctrine\ORM\Query\Parser.php(1529): Doctrine\ORM\Query\Parser->AbstractSchemaName() 
#3 path\to\orm\Doctrine\ORM\Query\Parser.php(1426): Doctrine\ORM\Query\Parser->RangeVariableDeclaration() 
#4 path\to\orm\Doctrine\ORM\Query\Parser.php(1168): Doctrine\ORM\Query\Parser->IdentificationVariableDeclaration() 
#5 path\to\orm\Doctrine\ORM\Query\Parser.php(757): Doctrine\ORM\Query\Parser->FromClause()
#6 path\to\ in path\to\orm\Doctrine\ORM\Query\QueryException.php on line 49

这段代码惹的祸

public function getActivePages()

    $qb = \WebTools\Doctrine\Doctrine::instance()->getQueryBuilder();
    $qb->select('page')
       ->from('Website\Model\Body\Page', 'page')
       ->where($qb->expr()->eq("page.isActive", true));
    $query = $qb->getQuery();
    $result = $query->getResult();
    \Doctrine\Common\Util\Debug::dump($result);
    die();
    return $result;

感谢任何帮助,谢谢

【问题讨论】:

从堆栈跟踪中的#1来看,该类不存在。 【参考方案1】:

试试

$qb->select('page')
   ->from('Page', 'page')

 $qb->select('page')
   ->from('\Website\Model\Body\Page', 'page')

并确保您的班级由 dotrine 映射。

【讨论】:

我发现我必须使用命名空间才能让 Doctrine 找到 Page 实体。感谢您指出这一点!

以上是关于学说 QueryBuilder 返回 QueryException的主要内容,如果未能解决你的问题,请参考以下文章

学说:QueryBuilder 存在的地方

学说:QueryBuilder 与 createQuery?

如何将这个简单的 sql 查询转换为学说 querybuilder

排除学说QueryBuilder中的重叠期

带日期的 in() 表达式的学说

教义queryBuilder:返回对象而不是数组