#php #doctrine #doctrine-orm #dql
#php #doctrine #doctrine-orm #dql
Вопрос:
В этом примере:
мы видим, что
SELECT e FROM EntitiesEmployee e WHERE e.name = 'test'
делает этот запрос:
SELECT p0_.id AS id0, p0_.name AS name1, p0_.department AS department2,
p0_.discr AS discr3 FROM Person p0_ WHERE (p0_.name = ?) AND p0_.discr IN ('employee')
Есть ли способ запрашивать записи только с помощью дискриминатора «Person»?
Это:
SELECT e FROM EntitiesPerson e WHERE e.name = 'test'
возвращает все записи.
Есть идеи?
Ответ №1:
По умолчанию родительский объект в объекте с отображением наследования, похоже, не использует правила дискриминатора.
Я обошел это, создав базовый класс / сущность.
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class PersonBase
{
/**
* @Id @Column(type="integer")
* @GeneratedValue
*/
protected $id;
/**
* @Column(type="string", length=50)
*/
protected $name;
// ...
}
/**
* @Entity
*/
class Person extends PersonBase
{
}
/**
* @Entity
*/
class Employee extends PersonBase
{
/**
* @Column(type="string", length=50)
*/
private $department;
// ...
}
Теперь Person будет использовать правила дискриминатора, вам никогда не нужно напрямую ссылаться на PersonBase.