我正在尝试急切地加载在关联的子类中定义的关联实体(在 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
由于这是一个无效的示例...我将/应该如何执行此操作以及如何执行此操作?