我使用的是Doctrine 2.3.4和Symfony 2.3.0。
我有两个实体:Person
和Application
。
当某个人申请工作时,会创建一个应用程序。
Person
到Application
的关系是OneToMany
,双向的。
使用常规的Doctrine文档这里,我只能在处理单个实体时获得正确的结果集。但是,当我添加关联实体时,我会得到一组根实体,但是它们与错误的相关实体相连。
换句话说,问题是我获得了一组应用程序,但所有应用程序都属于同一个人。
直接执行本机SQL查询时,返回正确的结果。
以下是代码:
$sql = "SELECT a.id, a.job, p.first_name, p.last_name
FROM application a
INNER JOIN person p ON a.person_id = p.id";
$rsm = new ResultSetMapping;
$rsm->addEntityResult('\Company\Department\Domain\Model\Application', 'a');
$rsm->addFieldResult('a','id','id');
$rsm->addFieldResult('a','job','job');
$rsm->addJoinedEntityResult('\Company\Department\Domain\Model\Person' , 'p', 'a', 'person');
$rsm->addFieldResult('p','first_name','firstName');
$rsm->addFieldResult('p','last_name','lastName');
$query = $this->em->createNativeQuery($sql, $rsm);
$result = $query->getResult();
return $result;
以下是实体类:
这里是实体类:
namespace Company\Department\Domain\Model;
use Doctrine\ORM\Mapping as ORM;
/**
* Person
*
* @ORM\Entity
* @ORM\Table(name="person")
*/
class Person
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string First name
*
* @ORM\Column(name="first_name",type="string",length=255)
*/
private $firstName;
/**
* @var string Last name
*
* @ORM\Column(name="last_name",type="string",length=255)
*/
private $lastName;
/**
*
* @var Applications[]
* @ORM\OneToMany(targetEntity="Application", mappedBy="person")
*/
private $applications;
应用程序类:
namespace Company\Department\Domain\Model;
use Doctrine\ORM\Mapping as ORM;
/**
* Application (Person applied for a job)
*
* @ORM\Entity
* @ORM\Table(name="application")
*/
class Application
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var Person
*
* @ORM\ManyToOne(targetEntity="Person", inversedBy="applications")
* @ORM\JoinColumn(name="person_id", referencedColumnName="id")
*/
private $person;
/**
* @var string
* @ORM\Column(name="job",type="string", length=100)
*/
private $job;
我可能漏掉了什么?