sma*_*ber 6 php doctrine symfony
当我迭代一个组的用户(group#users,它是一个 ManyToOne 关系)来显示用户电子邮件时,我收到此错误Entity of type 'AppBundle\\Entity\\User' for IDs id(155) was not found。但是,当我显示引发异常的用户时,我会看到以下内容:
// 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}\nRun Code Online (Sandbox Code Playgroud)\n\n此外,这个用户(其id等于155)确实存在于我的数据库中。
\n\n更新1
\n\npublic 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}\nRun Code Online (Sandbox Code Playgroud)\n
弄清楚了!!实际上有一个启用的学说过滤器,它在每个 sql 查询中添加一个条件。当我得到一个组时,与其相关的用户不会从数据库中加载,只有其 id 与组实体一起加载。当我尝试访问 id 之外的其他用户字段时,它会执行 sql 连接查询。同样,学说过滤器甚至将条件添加到连接条件中,这会导致结果为空。
因此,该错误消息显然具有误导性。