2017-09-15 32 views
0

我試圖通過Symfony 3/Doctrine 2應用程序通過pdo_sqlsrv查詢SQL Server。帶有ResultSetMapping對象的SQL本機查詢返回null

我有一個SQL查詢,我想用ResultSetMapping對象的結果與我的實體綁定:

這是我SupplierRepository.php

class SupplierRepository extends EntityRepository 
{ 
public function getSuppliers() 
{ 
    $rsm = new ResultSetMapping; 
    $rsm->addEntityResult('AppBundle\Entity\Supplier', 's'); 
    $rsm->addFieldResult('s', 'T_TIERS', 'code'); 
    $rsm->addFieldResult('s', 'T_LIBELLE', 'name'); 
    $rsm->addFieldResult('s', 'T_ADRESSE1', 'address1'); 
    $rsm->addFieldResult('s', 'T_ADRESSE2', 'address2'); 
    $rsm->addFieldResult('s', 'T_ADRESSE3', 'address3'); 
    $rsm->addFieldResult('s', 'T_CODEPOSTAL', 'zipcode'); 
    $rsm->addFieldResult('s', 'T_VILLE', 'city'); 
    $rsm->addFieldResult('s', 'T_SIRET', 'siret'); 

    $sql = 'SELECT s.T_TIERS, 
      s.T_LIBELLE, 
      s.T_ADRESSE1, 
      s.T_ADRESSE2, 
      s.T_ADRESSE3, 
      s.T_CODEPOSTAL, 
      s.T_VILLE, 
      s.T_SIRET 
      FROM RFFOURNISSEURS s 
      WHERE (s.T_NATUREAUXI=?) 
      AND 
      (s.T_FERME=?)'; 

    $query = $this->_em->createNativeQuery($sql, $rsm); 
    $query->setParameters(array(1 => 'FOU', 2 => '-')); 

    return $query->getArrayResult(); 
} 
} 

此功能我的實體Supplier.php

/** 
* Supplier 
* 
* @ORM\Table(name="supplier") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\SupplierRepository") 
*/ 
class Supplier 
{ 

/** 
* @var int 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @var int 
* 
* @ORM\Column(name="code", type="string", unique=true) 
*/ 
private $code; 

/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=255) 
*/ 
private $name; 

/** 
* @var string 
* 
* @ORM\Column(name="address1", type="string", length=255, nullable=true) 
*/ 
private $address1; 

/** 
* @var string 
* 
* @ORM\Column(name="address2", type="string", length=255, nullable=true) 
*/ 
private $address2; 

/** 
* @var string 
* 
* @ORM\Column(name="address3", type="string", length=255, nullable=true) 
*/ 
private $address3; 

/** 
* @var int 
* 
* @ORM\Column(name="zipcode", type="integer", nullable=true) 
*/ 
private $zipcode; 

/** 
* @var string 
* 
* @ORM\Column(name="city", type="string", length=255, nullable=true) 
*/ 
private $city; 

/** 
* @var int 
* 
* @ORM\Column(name="siret", type="integer", nullable=true) 
*/ 
private $siret; 

/** 
* @return int 
*/ 
public function getCode(): int 
{ 
    return $this->code; 
} 

/** 
* @param int $code 
*/ 
public function setCode(int $code) 
{ 
    $this->code = $code; 
} 

/** 
* @return string 
*/ 
public function getName(): string 
{ 
    return $this->name; 
} 

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

/** 
* @return string 
*/ 
public function getAddress1(): string 
{ 
    return $this->address1; 
} 

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

/** 
* @return string 
*/ 
public function getAddress2(): string 
{ 
    return $this->address2; 
} 

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

/** 
* @return string 
*/ 
public function getAddress3(): string 
{ 
    return $this->address3; 
} 

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

/** 
* @return int 
*/ 
public function getZipcode(): int 
{ 
    return $this->zipcode; 
} 

/** 
* @param int $zipcode 
*/ 
public function setZipcode(int $zipcode) 
{ 
    $this->zipcode = $zipcode; 
} 

/** 
* @return string 
*/ 
public function getCity(): string 
{ 
    return $this->city; 
} 

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

/** 
* @return int 
*/ 
public function getSiret(): int 
{ 
    return $this->siret; 
} 

/** 
* @param int $siret 
*/ 
public function setSiret(int $siret) 
{ 
    $this->siret = $siret; 
} 

錯誤/結果

查詢是很好的執行,我有1025數組中元素至極是正確的,但它們是空的,而不是供應商對象:

array(1025) { 
    [0]=> NULL 
    [1]=> NULL 
    [2]=> NULL 
    [3]=> NULL 
    [4]=> NULL 
    ... 
} 

任何想法?它是一個類型錯誤?在調試過程中,我能夠看到the data is getting pulled from the database

+0

我可以問是否真的需要原生查詢?這可以使用doctrine –

+0

您好M Khalid Junaid,謝謝你的回答,我選擇了本地查詢的選項,因爲我的查詢在這裏更簡單,真正的我有一個表包含連接,我不是很可以解決與查詢生成器,但我會以這種方式。 – YornLetard

回答

0

您的Supplier實體的字段都是私有的。將它們更改爲公開應允許RSM設置它們。您還應該從數據庫中提取一些內容以填充id字段。

class Supplier 
{ 
    public $id; 
    public $code; 
    public $name; 
    // etc. 
} 
+0

謝謝miken32 !!這是通過填寫我的實體的字段「id」來解決的(我也將字段從private改爲public,但它沒有解決)。 – YornLetard