[用法:Doctrine 2.6,Symfony 2.7]
使用Doctrine queryBuilder或直接DQL,如何在调用postLoad事件侦听器之前为所选实体的字段设置值,或以其他方式更改或操作返回的字段的值?
作为对我的上下文的简化描述,我有一个实体view
,它可以与大量不同的内容类型相关联。实体,所以它不能(不能)有直接的学说联想。但我通常希望将其他实体加载并附加到view->content
属性。所以我有一个postLoad监听器,可以自动检查它是什么类型的内容,如果内容尚未加载,则从正确的实体加载它。
我通常希望这是自动发生的,但如果我得到一个视图数组,这个延迟加载效率太低(数据库调用太多),所以在这些情况下我想在我之后以更有效的方式单独获取内容得到结果(一次不在postLoad监听器中一个实体)。这意味着我需要告诉听众忽略它通常的自动加载。如果我能够使用TRUE
值预先填充该字段,那么我可以轻松地执行此操作(因此听众认为它已经加载并且不会尝试自动获取它。
那么如果我创建查询时获取views
的列表,我会使用默认值1
填充该字段。在MySQL中很简单,只需:
SELECT *, 1 AS `content` FROM `view`;
注意:遗憾的是,这实际上没有设置view.content的值,它只是附加了一个名为content的别名...
虽然content
是view
实体中的属性,但它不是持久属性,因此该属性没有数据库字段。但我可以坚持下去(就像占位符一样)。让我们说我这样做,我仍然无法弄清楚如何操纵返回的值(数据库中总是空的),并在我想要时用1
预先填充它通知postLoad Listener忽略自动加载。