0

我正在尝试急切地加载在关联的子类中定义的关联实体(在 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

由于这是一个无效的示例...我将/应该如何执行此操作以及如何执行此操作?

4

0 回答 0