Doctrine2和Postgres:布尔值的输入语法无效:“”

时间:2012-07-10 12:54:07

标签: php postgresql symfony doctrine-orm

    SQLSTATE[22P02]: Invalid text representation: 7 
    ERROR: invalid input syntax for type boolean: ""
    500 Internal Server Error - PDOException

这是由Doctrine2(2.2-DEV)引起的错误消息,我担心这是再次出现的错误:http://www.doctrine-project.org/jira/browse/DDC-1394

导致此错误的查询如下:

public function getFindAllNonOthersQueryBuilder()
{
    return $this
        ->createQueryBuilder('t')
        ->where('t.isOther = :isOther')
        ->setParameter('isOther', false);
}

字段isOther以这种方式映射:

/**
 * @var boolean $isOther
 *
 * @ORM\Column(name="isOther", type="boolean")
 */
protected $isOther = false;

这里发生了什么? 我已经检查了postgres数据库中的类型,它也是boolean

3 个答案:

答案 0 :(得分:6)

我做了一些谷歌搜索,因为我有同样的问题,我通过FOSMessageBundle找到了解决方案,如果你将'\ PDO :: PARAM_BOOL'添加到你的setParameter它就可以了,如下:

$qb->setParameter('isOther', false, \PDO::PARAM_BOOL);

答案 1 :(得分:4)

您必须使用Literal表达式。它与issue #DDC-1683

有关

我的示例代码:

$q->andWhere($q->expr()->eq('item.published', $q->expr()->literal(true)));

答案 2 :(得分:0)

我遇到了同样的问题。

解决方案:使用 0 代替 false

...
->setParameter('isOther', 0);