使用 Doctrine 2 的 QueryBuilder 创建复杂的查询



我正在尝试用 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()查询时,都会收到以下错误输出:

致命错误: 未捕获的 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 (project-dir)\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(487): Doctrine\ORM\

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 子句?

我发现,这个问题的解决方案对我来说很尴尬: 该问题是由于使用实体类的类中缺少导入语句引起的。 教义只是以致命错误回应。

简而言之:始终导入类将使用的实体。

相关内容

  • 没有找到相关文章

最新更新