我的代码相当复杂,所以我将尝试用最简单的方式解释
我有一个父实体ValueList
。这个"列表"有许多ValueListItems
。
class ValueList
{
//...
/**
* @ODMReferenceMany(
* targetDocument="JobboardBaseEntityValueListItem",
* sort={"order"="asc"},
* cascade={"all"}
* )
*/
protected $items;
}
然后我有一个服务方法,它将一个新的ValueListItem
添加到这个(已经管理的)ValueList
中。
public function createValueListItem(ValueListItem $item, ValueList $list)
{
try {
$om = $this->getObjectManager();
$om->persist($item);
$list->addItem($item);
$om->persist($list);
$om->flush();
return $item;
} catch (Exception $e) {
throw $e;
}
}
这将实体正确地添加到Mongo集合中。然而,由于我使用AJAX调用执行控制器操作,我还需要重新调度"indexAction"以异步返回更新后的"list"HTML。
// ListItemController::createAndAttachValueItemToParentListAction()
// ....
// Below is the successful 'add' of the above method call return
if ($service->createValueListItem($form->getData(), $list)) {
$content = $this->forward()->dispatch('JobboardBaseControllerListItem', array(
'action' => 'index',
'id' => $list->getId()
));
return $this->jsonModel(array(
'success' => true,
'messages' => array($message),
'content' => $content
));
//... IndexAction
public function indexAction() {
// ...
$items = $list->getItems(); // Returns 0 (when there should be 1)
//...
}
通过forward()
调用(在$content
中)返回的HTML不包括新添加的ValueListItem
实体。但是,当我刷新页面时,它将正确显示。
条令似乎返回了一个缓存的ValueList
实体,该实体不包括新添加的ValueListItem
——只有在发出新请求时,才会显示新项目。
我的问题是,为什么学说会返回"旧"实体,而不是更新的实体?我的印象是,它应该是相同的实例,因此通过引用进行更新?
您可以使用实体管理器refresh
方法用实际数据刷新模型:
$om->refresh($list);