【发布时间】:2017-09-15 14:22:35
【问题描述】:
我正在尝试通过 Symfony 3/Doctrine 2 应用程序使用 pdo_sqlsrv 查询 SQL Server。
我有一个 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 个元素的数组,但它们是 NULL,而不是供应商对象:
array(1025) {
[0]=> NULL
[1]=> NULL
[2]=> NULL
[3]=> NULL
[4]=> NULL
...
}
有什么想法吗?是类型错误吗?在调试期间,我能够看到数据正在从数据库中提取:
【问题讨论】:
-
请问真的需要原生查询吗?可以使用学说来完成
-
嗨 M Khalid Junaid,感谢您的回答,我选择了本机查询选项,因为我在这里的查询更简单,我拥有的真正的查询包含一个表的连接,而且我不是很conftable 与查询生成器尚未,但我会这样做。
标签: php sql-server symfony doctrine