0

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

1 回答 1

0

我通过使用我注入自定义存储库的 Zend\EventManager 完成了这项工作。这行得通,但仍然不能很好地工作,因为 Doctrine 必须了解所有关系,所以我实际上想要在定义到位的情况下执行的查询是不可能执行的。尽管如此,我还是通过添加定义来解决它。

于 2012-07-14T08:48:26.233 回答