我有一个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
}