Doctrine 使用代理对象来表示相关对象,以便于延迟加载。这是一个非常酷的功能,但它会导致我试图完成的事情出现问题。
我已经自定义了我的用户对象,因此它们都需要与不同的对象相关联,我将其称为城市。这种关系运作良好。
我有一个表格,我的用户填写它以生成另一个对象,街道。街道也与城市对象有关。我不想让我的用户在填写表单时选择城市,而是想在将对象保存到数据库之前自动设置它。
我尝试使用 $event->setCity($user->getCity())
,但由于 $user->getCity() 返回一个代理对象,这会产生错误。我可以从代理对象调用一个函数来获取真实的吗?
注意:我知道我可以创建一个带有连接的自定义查询,以强制学说实际加载相关对象,但由于这是用户(使用 FOSUserBundle),因此很难正确执行。
最佳答案
编辑:正如@flu 所提到的,这种方法不会返回“真实”对象。但是,如果您需要来自对象的数据,它会很有用。
然后,您可以通过一些身份从 ObjectManager 中获取真实对象。
我们可以使用 Proxy 接口(interface)中的 __load() 方法
$proxyObject->__load();
关于symfony - 从教义2中的代理对象获取 "true"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8337754/