当我使用WHERE子句时,我的基本实体值为NULL

时间:2019-06-26 07:59:01

标签: php symfony doctrine-orm doctrine dql

我想用学问querybuilder重新引用本机SQL查询。 在这种情况下,我得到以下错误: 该查询将执行并返回结果(带有和不带有联接)。 但是,当我添加一个简单的WHERE时,基本实体值为NULL

经过测试
-QueryBuilder(复杂:默认情况下,我需要六个联接)
-QueryBuilder(简单:无联接)
-HQL
-不同的getResult()execute()通话

版本:

PHP 7.0(无法更新...)

 ./composer.phar info | grep doctrine
doctrine/annotations                 v1.4.0   Docblock Annotations Parser
doctrine/cache                       v1.6.2   Caching library offering an object-oriented API for many cache backends
doctrine/collections                 v1.4.0   Collections Abstraction library
doctrine/common                      v2.7.3   Common Library for Doctrine projects
doctrine/dbal                        v2.5.13  Database Abstraction Layer
doctrine/doctrine-bundle             1.10.3   Symfony DoctrineBundle
doctrine/doctrine-cache-bundle       1.3.5    Symfony Bundle for Doctrine Cache
doctrine/inflector                   v1.2.0   Common String Manipulations with regard to casing and singular/plural rules.
doctrine/instantiator                1.0.5    A small, lightweight utility to instantiate objects in PHP without invoking their cons...
doctrine/lexer                       1.0.2    PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Pars...
doctrine/orm                         v2.5.14  Object-Relational-Mapper for PHP

某些代码

已填充基本值(如idtitle)。

$qb = $this->createQueryBuilder('artikel')
           ;
return $qb->getQuery()->execute();

null以外的基本值为id

$qb = $this->createQueryBuilder('artikel')
           ->andWhere('artikel.id = :ids')
           ->setParameter('ids', '1010729320')
           ;
return $qb->getQuery()->execute();

为什么我使用null子句时基本值为WHERE

1 个答案:

答案 0 :(得分:1)

这很容易。 ;)

问题是

id的数据类型为integer,给定的参数类型为string
因此有所不同,php不会自动广播某些内容。

解决方案

删除ID之前和之后的'

正确的代码

注意:找出丢失的'

$qb = $this->createQueryBuilder('artikel')
           ->andWhere('artikel.id = :ids')
           ->setParameter('ids', 1010729320)
           ;
return $qb->getQuery()->execute();

对我来说,这个问题以前曾发生过,但这是另一个故事(我在上面的评论中写了几分钱)。

谢谢大家