Doctrine CTI急切地加载在关联的子类中定义的关联实体

时间:2018-01-04 16:33:04

标签: php symfony doctrine-orm dql class-table-inheritance

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

因为这是一个不起作用的例子......我将如何/应该如何做以及如何做?

0 个答案:

没有答案