我试图急切地加载在关联的子类中定义的关联实体(在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中这是不可能的。 (see relevant issue about this topic)
DQL中可能的非工作示例:
SELECT
business, employee, employeeBook
JOIN
CAST(business.persons AS Entity\Employee) AS employee
JOIN
employee.books AS employeeBook
因为这是一个不起作用的例子......我将如何/应该如何做以及如何做?