Я пытаюсь с готовностью загрузить связанные сущности, определенные в подклассе ассоциации (в DQL), чтобы эта связь не загружалась лениво (что вызвало много отдельных запросов).
Предположим, у меня есть бизнес с людьми (которых я буду называть людьми для простоты), из которых несколько являются сотрудниками. Сотрудник может иметь в своем распоряжении книги, в то время как все остальные люди не могут.
/**
* @Entity
*/
class Business
{
/**
* @OneToMany(targetEntity="Person", mappedBy="business")
*/
private $persons;
}
/**
* @Entity
* @InhertianceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class Person
{
/**
* @ManyToOne(targetEntity="business", inversedBy="persons")
* @JoinColumn(name="business_id", referencedColumnName="id")
*/
private $business;
}
/**
* @Entity
*/
class Employee extends Person
{
/** ... */
private $books;
}
/**
* @Entity
*/
class Book { /* ... */ }
Сущности, представляющие ситуацию в PHP.
Я хочу получить бизнес-единицу и всех ее лиц, в то же время охотно загружая книги всех сотрудников, чтобы они не загружались лениво для каждого отдельного сотрудника.
Если бы я делал это с помощью DQL-запроса, мне пришлось бы понизить связь Person с Employee, чтобы присоединиться к книгам. Это, однако, невозможно в DQL. (см. соответствующий вопрос по этой теме)
Возможный нерабочий пример в DQL:
SELECT
business, employee, employeeBook
JOIN
CAST(business.persons AS Entity\Employee) AS employee
JOIN
employee.books AS employeeBook
Так как это нерабочий пример … Как бы / я должен сделать это и как?
Задача ещё не решена.
Других решений пока нет …