托管实体缓存在同一请求中,但未更新



我的代码相当复杂,所以我将尝试用最简单的方式解释

我有一个父实体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);

相关内容

  • 没有找到相关文章

最新更新