我必须从父实体访问子实体的属性才能执行过滤。
就是这样:我有一个属于一个人的笔记,反过来,真人会扩展人,所以我要做的就是过滤所有属于一个人的笔记,其属性为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