我有一个Page由 module 加载的 Doctrine 实体Foo。该页面是Gedmo Doctrine Extension提供的嵌套集。该模块Bar有另一个模型Metadata,1:1 与页面相关。我想在Foo加载树时直接加入元数据。
所以在模块内部Foo:
$em->getRepository('My\Entity\Page')->getRootNodes();
这会加载一组页面,但我希望直接使用元数据。因为我在加载节点后触发了一个事件,所以所有模块都可以订阅这个事件并使用它们想要的任何页面(在这种情况下,导航结构需要元数据,但导航与 module 无关Foo,仅与Bar)。
系统必须保持模块化,因此Page不依赖于Metadata. 是否有可能Bar监听一个事件,在存储库中构建查询?然后它添加一个额外的连接来加载每个页面的元数据。
function getCalledOnEventTrigger($event)
{
    $q = $event->getQueryObject();
    $q->leftJoin('some join expression');
    // Query now joins metadata as well
}