2017-02-02 7 views
0

私は2つの同じSymfony 2.8プロジェクトを持っています。これら二つのプロジェクトの唯一の違いは、1つの教義ORMバージョンv2.4.8を実行しているし、他はv2.5.5なぜ、null値を含むレコードをcreateNativeQueryが返しませんか?

問題

私は両方の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); 

私のエンティティは次のようになります。私のStoredProcedureで

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; 
    } 
} 

私が持っているすべてが、これは次のとおりです。

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

このコードは完全に私にnull値を返すバージョンv2.4.8に完全に正常に動作します。ただし、これはv2.5.5では機能しません。返されるのは、その内部にNULLがあり、newPKmsgの値ではない配列です。私がnullを削除し、空の文字列またはそれ以外のもので置き換えると、それは動作します。しかし、いくつかの神はあまり理由がないので、それはNULLの値が気に入らない。私が望むのは、nullが返されるかどうかをチェックすることですが、私はdoctrineが適切な値を返さないとチェックすることができません。

私が気づいていないこれらのバージョン間で変更されたことはありますか?ネイティブクエリからNULLの値を読み取るためには、何をする必要がありますか?

答えて

0

addFieldResultの代わりにaddScalarResultを使用して解決しました。変更されたコードは次のようになります。

$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); 
関連する問題