我有两个实体:Rdv和RdvAnethetist扩展了Rdv。
@ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="typeRdv", type="string")
* @ORM\DiscriminatorMap({"simple" = "Rdv", "anesthetist" = "RdvAnesthetist"})
*/
class Rdv{
...}
class RdvAnesthetist extends Rdv {
/**
* @var \DateTime
* @Assert\Date()
* @ORM\Column(name="DateSurgery", type="date", nullable=true)
*/
private $dateSurgery;
/**
* @ORM\ManyToOne(targetEntity="XMP\CalendarBundle\Entity\Surgeon" )
* @ORM\JoinColumn(nullable=false)
*/
private $surgeon;
}
如果Rdv是RdvA,我正在尝试查询包含数组结果的数据外科医生
class RdvRepository extends \Doctrine\ORM\EntityRepository
{
public function getAllRdv($date){
$qb = $this->createQueryBuilder('r');
$qb->setParameter('date', $date, \Doctrine\DBAL\Types\Type::DATETIME);
return $qb->getQuery()->getArrayResult();
}
通过这种方式,我可以访问field dateSurgery,但不能访问field外科医生。 Symfony自动添加与表RdvA的关系,但仅添加不具有关系的字段。 我试图在查询中手动添加关系RdvAnesthetist。
$qb->leftJoin('XMPCalendarBundle:RdvAnesthetist', 'rdva','WITH','r.id=rdva.id')
->leftJoin('rdva.surgery','surg')
->addSelect('surg');
在sql manager中可以,但是在查询结果中,手术不会出现在数组中。 我尝试过
$qb->leftJoin('XMPCalendarBundle:RdvAnesthetist', 'rdva','WITH','r.id=rdva.id')
->leftJoin('rdva.surgery','surg')
->addSelect('rdva')
->addSelect('surg');
但是现在我对同一实体在数组结果中有2个元素,其中一个进行手术,一个不进行。
使用getResult()可以,但是我需要getArrayResult()导致大量数据。我只需要显示数据并且不需要更新,我不需要实体,只需数组。
谢谢