如何使用DQL(doctrine)访问父级的子属性?

时间:2017-07-13 14:57:38

标签: php symfony oop doctrine-orm

我必须从父实体访问子实体的属性才能执行过滤。

就是这样:我有一个属于一个人的笔记,反过来,真人会扩展人,所以我要做的就是过滤所有属于一个人的笔记,其属性为first_name =“x”(此属性为在现实中,不是亲自)。 然后:从具有DQL的存储库中,我只能访问人的属性,因为它与笔记有关系,但与真实人(人的延伸)无关。据了解?

/**
 * Person
 *
 * @ORM\Table(name="person")
 * @ORM\Entity(repositoryClass="PersonBundle\Repository\PersonRepository")
 * @ORM\InheritanceType("JOINED")
 */
Class Person {

   /**
     * @ORM\OneToMany(targetEntity="Note", mappedBy="person", cascade={"persist", "remove"})                
    */
    private $notes;

}

诺塔

/**
 * Note
 *
 * @ORM\Table(name="note")
 * @ORM\Entity(repositoryClass="PersonBundle\Repository\NoteRepository")
 * @ORM\InheritanceType("JOINED")
 */
Class Note {

   /**
    * @ORM\ManyToOne(targetEntity="Person", inversedBy="notes", cascade={"persist"})
    */
    private $person;

}

真人

/**
 * RealPerson
 *
 * @ORM\Table(name="realperson")
 * @ORM\Entity(repositoryClass="PersonBundle\Repository\RealPersonRepository")
  */
Class RealPerson extends Person {

   /**
    * @ORM\Column(name="first_name", type="string", nullable=true)
    */
    private $first_name;

}

然后在笔记库中

$query = $this->createQueryBuilder('n');

$name = $request->get('filters')['name'];

if( ! empty($name) && $name != 'undefined') {

    $query->join('n.person', 'p')
          ->join('p.realperson', 'rp')
          ->andWhere('rp.first_name LIKE ?2')
          ->setParameter('2', '%'.$name.'%');

}

$query->orderBy('n.id', 'DESC')->getQuery();

这会引发错误,因为它无法访问realperson的实体,因为realperson是person的扩展。

我该怎么做?

错误:

[Semantical Error] line 0, col 87 near 'rp WHERE (n.deleted_at': Error: Class PersonBundle\Entity\Person has no association named realperson

0 个答案:

没有答案