【问题标题】:Doctrine 2 - Unable to access newly created record (outside of Doctrine)Doctrine 2 - 无法访问新创建的记录(Doctrine 之外)
【发布时间】:2015-08-19 00:05:00
【问题描述】:

关于我的环境的一些重要说明:

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

情况是:

// 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

找不到对象,大概是因为Entity被Doctrine缓存或存储在内存某处。

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

【问题讨论】:

    标签: php wordpress orm doctrine-orm doctrine


    【解决方案1】:

    您可以使用

    清除学说缓存
    EntityManager::clear()
    

    http://doctrine-orm.readthedocs.org/en/latest/reference/working-with-objects.html(搜索清除方法)

    【讨论】:

    • 感谢您的快速响应,但是当我在尝试检索记录之前添加$MyDb->em->clear(); 时,它仍然找不到它们。我知道它在数据库中(通过调试看到),Doctrine 就是无法访问它。 我是否正确清除它?
    • 只是为了更正-在您的问题中,您有$MyDb->em..,但现在有$TilDb->em...。 Clear 方法实际上将所有对象从存储库中分离出来。还有一个想法。教义和 wordpress 是否使用相同的连接?如果没有,你可以尝试在wordpress连接上插入后对教义连接进行纯查询吗?
    • 是的,改名只是为了让问题更笼统。 WP 和 Doctrine 使用相同的数据库。我宁愿避免通过 DQL 请求它,因为我不确定它会返回一个对象吗?
    • 如果你使用 DQL 或 find 方法没关系。您可以从 DQL 查询中选择您想要的结果(->getResult() - 返回对象,->getArrayResult()- 返回数组等)。可以肯定的是,通过相同的连接,我不是指相同的用户凭据,而是相同的连接对象资源。如果有帮助,您可以尝试使用 dql 进行查询吗?
    • 嗯,不,不是同一个连接,WP 有它自己的数据库访问权限,而我使用的是 Doctrine。尝试使用 DQL,但仍然没有运气。不确定我是否正确清除了缓存,或者如果我是,那么缓存不是问题..
    【解决方案2】:

    这个解决方案最终相当简单。在尝试了clear()refresh() 并强制清除 Doctrine 的缓存后,我的选择已经不多了。

    事实证明,我必须做些什么才能让 Doctrine 检查新记录是否已创建、已关闭并打开连接:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多