未找到 ID id(155) 的“AppBundle\Entity\User”类型的实体

sma*_*ber 6 php doctrine symfony

当我迭代一个组的用户(group#users,它是一个 ManyToOne 关系)来显示用户电子邮件时,我收到此错误Entity of type 'AppBundle\\Entity\\User' for IDs id(155) was not found。但是,当我显示引发异常的用户时,我会看到以下内容:

\n\n
// In my controller\ndump($groups[0]->getUser());\n\n// Output\nUser {#761 \xe2\x96\xbc\n  +__isInitialized__: false\n  #id: 155\n  #email: null\n  #firstName: null\n  #lastName: null\n  #roles: null\n   \xe2\x80\xa62\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

此外,这个用户(其id等于155)确实存在于我的数据库中。

\n\n

更新1

\n\n
public function getByCriteria(array $criteria)\n{\n    $qb = $this->createQueryBuilder('g');\n    // ....\n\n\n    return $qb\n            ->getQuery()\n            // This does NOT change anything ?? Isn't this supposed to load related user??\n            // http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#temporarily-change-fetch-mode-in-dql\n            ->setFetchMode('class_namespace', 'user', ClassMetadata::FETCH_EAGER)\n            ->getResult();\n}\n
Run Code Online (Sandbox Code Playgroud)\n

sma*_*ber 5

弄清楚了!!实际上有一个启用的学说过滤器,它在每个 sql 查询中添加一个条件。当我得到一个组时,与其相关的用户不会从数据库中加载,只有其 id 与组实体一起加载。当我尝试访问 id 之外的其他用户字段时,它会执行 sql 连接查询。同样,学说过滤器甚至将条件添加到连接条件中,这会导致结果为空。

因此,该错误消息显然具有误导性。