我正在尝试使用MySQL数据库和Doctrine 2作为ORM在PHP 7中编写自己的登录脚本。不幸的是,当我尝试从数据库中获取数据时(例如,用户通过登录名登录帐户),我得到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:在(project-dir)\ vendor \ doctrine \ orm \ lib中选择一个FROM Entities \ LoginAccountDTO a WHERE a.username =?1 \ Doctrine \ ORM \ Query \ QueryException.php:43堆栈跟踪:#0(project-dir)\ 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('第0行,第14列......',数组)#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在第65行的(project-dir)\ vendor \ doctrine \ orm \ lib \ Doctrine \ ORM \ Query \ QueryException.php
Doctrine的配置应该是正确的,因为如果我尝试通过->findAll()
获取数据,我可以看到存储的数据。同样,实体也在数据库中正确创建。
我尝试使用Doctrine 2(.6.0),如文档中所述,但没有成功。可以请任何人帮我从Doctrine的查询字符串/准备好的查询中的where子句从数据库中获取数据吗?
答案 0 :(得分:0)
我发现,这个问题的解决方案对我来说是安静的:这个问题是由于在使用实体类的类中缺少import语句而引起的。学说只是回应致命错误。
简而言之:始终导入将由班级使用的实体。