我正在尝试用 PHP 7 编写自己的登录脚本,使用 MySQL 数据库和 Doctrine 2 作为 ORM。不幸的是,当我尝试从数据库中获取数据(例如,用户通过登录名登录帐户)时,我得到一个DoctrineORMQueryQueryException
.
我遵循代码优先的方法,并拥有我的用户帐户实体,以及原则 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 EntitiesLoginAccountDTO account WHERE account.username = ?1 or account.email = ?1"
现在,每次我尝试->getResult()
查询时,都会收到以下错误输出:
Query\QueryException::d qlError('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 on65号线
Doctrine 的配置应该是正确的,因为如果我尝试通过->findAll()
获取数据,我可以看到存储的数据。此外,在数据库中正确创建了实体。
我尝试使用文档中描述的教义 2(.6.0),但没有成功。任何人都可以帮助我从数据库中获取数据,并在 Doctrine 的查询字符串/准备查询中使用 where 子句?
我发现,这个问题的解决方案对我来说很尴尬: 该问题是由于使用实体类的类中缺少导入语句引起的。 教义只是以致命错误回应。
简而言之:始终导入类将使用的实体。