【问题标题】:Doctrine createNativeQuery with postgres, boolean cast带有 postgres、布尔类型转换的学说 createNativeQuery
【发布时间】:2014-05-26 15:41:31
【问题描述】:

所以,我的数据库中有一个字段is_good,输入boolean。所以如果我检查我的数据库,我可以在我的数据中看到TRUEFALSE

我有一个关于 Doctrine 的简单查询,我只是检查 my_table.is_good = $isgood 是否。

我有var_dump($isgood),我在这个变量中有一个布尔值。

当我执行我的查询时,我有这个错误(法语):

SQLSTATE[42883]: Undefined function: 7 ERREUR:  l'opérateur n'existe pas : boolean = integer

错误消息中的查询告诉我:my_table.is_good = 1

我不明白为什么我不能比较field = boolean

编辑:

这是我的第一个var_dump($isgood)

<pre class='xdebug-var-dump' dir='ltr'><small>boolean</small> <font color='#75507b'>true</font></pre>

我已经尝试在我的变量中输入 'true' 和 'false',所以 var_dump($isgood) 给我显示一个字符串,这样查询就可以了。我不明白!

【问题讨论】:

  • 请告诉我们您的确切var_dump($isgood) 结果。
  • 我编辑了我的帖子,如果我在变量中输入一个字符串 'true' 或 'false' 就可以了...
  • 我理解对了吗,您这样设置查询:...-&gt;createNativeQuery("SELECT ... WHERE my_table.is_good = $isgood")?

标签: php postgresql symfony doctrine-orm


【解决方案1】:

如果您想在查询中插入变量,您应该使用准备好的语句。在学说中(使用本机查询),您可以使用NativeQuerysetParameter 函数:

<?php
use Doctrine\ORM\Query\ResultSetMapping;

$rsm = new ResultSetMapping();
// build rsm here

$sql = 'SELECT something FROM my_table WHERE my_table.is_good = ?';
$query = $entityManager->createNativeQuery($sql, $rsm);
$query->setParameter(1, $isgood);
$somethings = $query->getResult();

还有第三个参数可以显式设置参数的类型,但是会自动检测布尔值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2015-07-05
    • 2014-09-07
    • 2017-04-30
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多