【问题标题】:Strange Doctrine EntityNotFoundException奇怪的教义EntityNotFoundException
【发布时间】:2015-04-28 12:17:33
【问题描述】:

我在 Symfony 和 Doctrine 问题上遇到了一个奇怪的行为,实际上发现这可能与 this 错误有关。

request.CRITICAL:未捕获的 PHP 异常 Doctrine\ORM\EntityNotFoundException:“找不到实体。”在 /dev/vendor/doctrine/orm/lib/Doctrine/ORM/Proxy/ProxyFactory.php 行 177 {“异常”:“[对象] (学说\ORM\EntityNotFoundException(代码:0)

提供一些代码示例:

$nextItems = $this->itemManager->findNextItemByCatId($catId, 2, $allItems);

然后我给两个返回的结果赋值,如下:

$output["next"] = $nextItems[0];
$output["following"] = $nextItems[1];

然后实际上是通过 API 返回的。

但是,当 - 出于测试目的 - 我分配随机值时:

$output["next"] = "Test value 1";
$output["following"] = "Test value 2";

然后没有异常和错误发生,响应状态为200,符合预期。

这里有什么想法吗?

【问题讨论】:

  • 首先,您在第一个示例中使用 $nextItems 作为变量,然后在第二个示例中使用数组。像这样使用它:$nextitems[]
  • 那是因为`findNextItemByCatId()'返回一个数组。

标签: php symfony orm doctrine-orm


【解决方案1】:

我为此苦苦挣扎了几个小时,然后找到了两个解决方案:

  1. 在 BasicEntityPersister 的第 758 行应用原则解决方法

改变:

    return $entities ? $entities[0] : null;

到:

    return $entities ? $entities[0] : $entity;
  1. 重新生成 symfony 引导缓存:

    composer run-script post-update-cmd --no-dev
    
    • 对于 2,我还将 mysql 升级到 5.6

【讨论】:

    【解决方案2】:

    也许很明显,但是您是否检查过您的查询是否返回值?关于您的实体,请确保没有错误 (doctrine orm:validate-schema)。
    顺便说一句,代理目录有一些问题 - 通常在 OS X 上 (Doctrine 2. Auto generating proxies)

    【讨论】:

    • 是的,它确实返回值,特别是预期值。
    【解决方案3】:

    就我而言,我非常关注不正确的注释(正如大多数回复所暗示的那样)并且没有看到一个简单的问题。我刚刚导入了一个损坏的数据库转储。

    所以如果有人再次遇到同样的问题:

    (1) 使用 orm:schema-tool:validate 不仅可以检查正确的注释,还可以检查您的数据库是否同步。

    (2) 始终使用校验和检查下载的数据库!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 2012-04-22
      相关资源
      最近更新 更多