我有两个相同的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但是我似乎无法检查没有doctrine返回正确的值。
我不知道这些版本之间有什么变化吗?为了从原生查询中读取NULL
值,我需要做什么?
答案 0 :(得分:0)
我使用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);