【发布时间】:2018-08-23 15:28:29
【问题描述】:
我正在尝试在 PHP 7 中编写我自己的登录脚本,使用 MySQL 数据库和 Doctrine 2 作为 ORM。不幸的是,当我尝试从数据库中获取数据(例如,用户通过登录名登录帐户)时,我得到了一个Doctrine\ORM\Query\QueryException。
我遵循代码优先的方法,并为用户帐户设置如下实体,以及 Doctrine 2 实体管理器。有什么我想念的吗?使用简单的->findall() 获取数据可以正常工作。
我尝试构建的查询:
$query = DatabaseManager::_instance()->createQuery("SELECT a FROM " . LoginAccountDTO::class . " a WHERE a.username = ?1");
或使用查询生成器:
$qb = DatabaseManager::_instance()->createQueryBuilder();
$qb->select('account')
->from(LoginAccountDTO::class, 'account')
->where('account.username = ?1 OR account.email = ?1')
->setParameter(1, $username);
(以及通过教义的expr() 进行测试)。
创建的DQL如下:
"SELECT a FROM Entities\LoginAccountDTO account WHERE account.username = ?1 or account.email = ?1"
现在,每次我尝试对->getResult() 进行查询时,都会得到以下错误输出:
致命错误: 未捕获的 Doctrine\ORM\Query\QueryException: SELECT a FROM Entities\LoginAccountDTO a WHERE a.username = ?1 in (project-dir)\vendor\doctrine\orm\lib \Doctrine\ORM\Query\QueryException.php:43 堆栈跟踪:#0(项目目录)\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(487):Doctrine\ORM\Query\ QueryException::dqlError('SELECT account FROM K...') #1 (project-dir)\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(987): Doctrine\ORM\Query\ Parser->semanticalError('line 0, col 14 ...', Array) #2 (project-dir)\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(1728): Doctrine\ORM \Query\Parser->validateAbstractSchemaName('Entities\Accoun') #3 (project-dir)\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(1578): Doctrine\ORM\Query\Parser ->RangeVariableDeclaration() #4 (project-dir)\ve in (project-dir)\vendor\doctrine\orm\lib\Doctrine\ORM\Query\QueryException.php 第 65 行
Doctrine 的配置应该是正确的,因为如果我尝试通过->findAll() 获取数据,我可以看到存储的数据。实体也在数据库中正确创建。
我尝试使用文档中描述的 Doctrine 2(.6.0),但没有成功。谁能帮我在 Doctrine 的查询字符串/准备查询中使用 where 子句从数据库中获取数据?
【问题讨论】:
标签: php mysql doctrine-orm query-builder