原则2 - 无法访问新创建的记录(在Doctrine之外)

时间:2015-08-19 00:05:01

标签: php wordpress orm doctrine-orm doctrine

关于我的环境的几个关键注释:

  • 我有一个基于Wordpress的应用程序,我们正在使用Doctrine作为我们的ORM。
  • 为了保持WP的完整性,我们让WP处理用户的创建
  • 通过Doctrine正确映射每个WP对象和自定义对象。

情况是:

// 1. Create a user via **WP** function (which returns ID)
$wp_user_id = wp_insert_user($wp_user_array);

// 2. Then, I need to immediately retrieve that user object via Doctrine
$wp_user = $MyDb->em->getRepository('WpUsers')->findOneBy(array('id'=>$wp_user_id));

// 3. RESULT = NULL

找不到该对象,可能是因为该实体被Doctrine缓存或存储在某个内存中。

如何强制Doctrine查看数据库并获取新创建的用户?

2 个答案:

答案 0 :(得分:0)

您可以使用

清除doctrine缓存
EntityManager::clear()

请参阅http://doctrine-orm.readthedocs.org/en/latest/reference/working-with-objects.html(搜索明确方法)

答案 1 :(得分:0)

这方面的解决方案最终变得相当简单。在尝试clear()refresh()并强制清除Doctrine的缓存后,我的选项已用完。

事实证明我必须要做的是让Doctrine检查新记录是否已创建,关闭并打开连接:

$this->_em->getConnection()->close();
$this->_em->getConnection()->connect();

我知道,这不是最理想的解决方案,但它确实有效,我现在已经调试了五天了!