【问题标题】:Why won't createNativeQuery return records containing null value?为什么 createNativeQuery 不会返回包含空值的记录?
【发布时间】:2017-02-02 20:53:21
【问题描述】:

我有两个相同的 Symfony 2.8 项目。这两个项目的唯一区别是一个运行 Doctrine ORM 版本v2.4.8,另一个运行v2.5.5

问题

我在两个 Symfony 项目中都有以下这段代码。

$rsm = new ResultSetMapping();
$rsm->addEntityResult('EntityBundle:New', 'u');
$rsm->addFieldResult('u', 'newPK', 'newPK');
$rsm->addFieldResult('u', 'msg', 'msg');
$query = $em->createNativeQuery('StoredProcedureName @a= :a, @b= :b, @c= :c', $rsm);
$query->setParameter('a', 'a');
$query->setParameter('b', 'b');
$query->setParameter('c', 'c');
$result = $query->getArrayResult();
var_dump($result);

我的实体如下所示:

use Doctrine\ORM\Mapping as ORM;

/**
 * New
 *
 * @ORM\Table(name="dbo.New")
 * @ORM\Entity()
 */
class New
{
    /**
     * @var string
     *
     * @ORM\Column(name="newPK", type="string", length=255, unique=false)
     */
    private $newPK;
    /**
     * @var string
     *
     * @ORM\Column(name="msg", type="string", length=255, unique=false)
     */
    private $msg;
    /**
     * @return string
     */
    public function getNewPK()
    {
        return $this->newPK;
    }

    /**
     * @param string $newPK
     */
    public function setNewPK($newPK)
    {
        $this->newPK = $newPK;
    }
    /**
     * @return string
     */
    public function getMsg()
    {
        return $this->msg;
    }

    /**
     * @param string $msg
     */
    public function setMsg($msg)
    {
        $this->msg = $msg;
    }
}

在我的 StoredProcedure 中,我只有这个:

CREATE PROCEDURE [dbo].[StoredProcedureName] 
AS
SELECT null as newPK, 'aaa' As msg
GO

此代码在 v2.4.8 版本上完美运行,完美返回 null 值。但是,这不适用于v2.5.5。它返回的只是一个包含 NULL 的数组,而不是 newPK AND msg 值。如果我删除 null 并将其替换为空字符串或其他任何内容,它就可以工作。但是出于某种天经地义的原因,它不喜欢 NULL 值。我只想检查是否返回 null,但如果没有教义返回正确的值,我似乎无法检查。

这些版本之间有什么我不知道的变化吗?我需要做什么才能从本机查询中读取 NULL 值?

【问题讨论】:

    标签: php sql-server symfony orm doctrine


    【解决方案1】:

    我使用addScalarResult 而不是addFieldResult 解决了这个问题。修改后的代码如下:

    $rsm = new ResultSetMapping();
    $rsm->addScalarResult('u', 'newPK', 'newPK');
    $rsm->addScalarResult('u', 'msg', 'msg');
    $query = $em->createNativeQuery('StoredProcedureName @a= :a, @b= :b, @c= :c', $rsm);
    $query->setParameter('a', 'a');
    $query->setParameter('b', 'b');
    $query->setParameter('c', 'c');
    $result = $query->getArrayResult();
    var_dump($result);
    

    【讨论】:

      猜你喜欢
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      相关资源
      最近更新 更多