Php 条令2-无法访问新创建的记录(条令之外)

Php 条令2-无法访问新创建的记录(条令之外),php,wordpress,orm,doctrine-orm,doctrine,Php,Wordpress,Orm,Doctrine Orm,Doctrine,关于我的环境的几个关键注意事项: 我有一个基于Wordpress的应用程序,我们使用Doctrine作为我们的ORM 为了维护WP的完整性,我们让WP处理用户的创建 每个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 immediatel

关于我的环境的几个关键注意事项:

  • 我有一个基于Wordpress的应用程序,我们使用Doctrine作为我们的ORM
  • 为了维护WP的完整性,我们让WP处理用户的创建
  • 每个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查看数据库并获取这个新创建的用户?

您可以使用

EntityManager::clear()

请参阅(搜索清除方法)

您可以使用

EntityManager::clear()

请参阅(搜索清除方法)

解决此问题的方法非常简单。在尝试了
clear()
refresh()
和强制清除Doctrine的缓存后,我的选项已经用完了

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

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

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

解决这个问题的方法非常简单。在尝试了
clear()
refresh()
和强制清除Doctrine的缓存后,我的选项已经用完了

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

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

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

感谢您的快速响应,但是当我添加
$MyDb->em->clear()时在尝试检索记录之前,它仍然找不到它们。我知道它在数据库中(通过调试可以看到),但我无法访问它。我是否正确地清除了它?只是为了更正-在您的问题中,您有
$MyDb->em..
,但现在有
$TilDb->em..
。Clear方法实际上从存储库中分离所有对象。还有一个主意。doctrine和wordpress使用相同的连接吗?如果没有,在wordpress连接上插入后,您是否可以尝试对doctrine连接进行纯查询?是的,名称更改只是为了使问题更一般化。WP和条令使用相同的数据库。我宁愿避免通过DQL请求它,因为我不确定结果是否会返回一个对象,如果您使用DQL或find方法,这并不重要。您可以选择从DQL查询中获取结果的方式(
->getResult()
-返回对象,
->getArrayResult()
-返回数组等)。可以肯定的是,相同的连接并不是指相同的用户凭证,而是指相同的连接对象资源。如果有帮助的话,你能试着用dql进行查询吗?不,不是同一个连接,WP有自己的DB访问权限,而我在使用Doctrine。尝试使用DQL,但仍然没有成功。不确定我是否正确清除了缓存,或者如果是,则缓存不是问题。.感谢您的快速响应,但是当我添加
$MyDb->em->clear()在尝试检索记录之前,它仍然找不到它们。我知道它在数据库中(通过调试可以看到),但我无法访问它。我是否正确地清除了它?只是为了更正-在您的问题中,您有
$MyDb->em..
,但现在有
$TilDb->em..
。Clear方法实际上从存储库中分离所有对象。还有一个主意。doctrine和wordpress使用相同的连接吗?如果没有,在wordpress连接上插入后,您是否可以尝试对doctrine连接进行纯查询?是的,名称更改只是为了使问题更一般化。WP和条令使用相同的数据库。我宁愿避免通过DQL请求它,因为我不确定结果是否会返回一个对象,如果您使用DQL或find方法,这并不重要。您可以选择从DQL查询中获取结果的方式(
->getResult()
-返回对象,
->getArrayResult()
-返回数组等)。可以肯定的是,相同的连接并不是指相同的用户凭证,而是指相同的连接对象资源。如果有帮助的话,你能试着用dql进行查询吗?不,不是同一个连接,WP有自己的DB访问权限,而我在使用Doctrine。尝试使用DQL,但仍然没有成功。不确定是否已正确清除缓存,或者如果已正确清除,则缓存不是问题所在。。