当我遍历一个组的用户(组#users和它的ManyToOne关系)来显示用户的电子邮件时,我收到此错误Entity of type 'AppBundle\Entity\User' for IDs id(155) was not found
。但是,当我显示引发异常的用户时,我会看到:
// In my controller
dump($groups[0]->getUser());
// Output
User {#761 ▼
+__isInitialized__: false
#id: 155
#email: null
#firstName: null
#lastName: null
#roles: null
…2
}
此外,此用户(其id等于155)确实存在于我的数据库中。
更新1
public function getByCriteria(array $criteria)
{
$qb = $this->createQueryBuilder('g');
// ....
return $qb
->getQuery()
// This does NOT change anything ?? Isn't this supposed to load related user??
// http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#temporarily-change-fetch-mode-in-dql
->setFetchMode('class_namespace', 'user', ClassMetadata::FETCH_EAGER)
->getResult();
}
答案 0 :(得分:3)
想出来!!实际上有一个启用的doctrine过滤器,它在每个sql查询中添加一个条件。当我获得一个组时,与数据库相关的用户不会从数据库加载,只有其id加载了组实体。当我尝试访问除id之外的其他用户字段时,它会执行sql join查询。同样,doctrine过滤器甚至将条件添加到连接条件,这会导致结果为空。
因此错误信息显然具有误导性。
答案 1 :(得分:0)
我发现有问题的桌子上有孤儿,出于某种原因,删除对象没有被级联。
就我而言:
SELECT * FROM ACCESS GROUP WHERE ID = 2;
-- 0 RESULTS.
SELECT * FROM GROUP_ACESSO_USUARIO_CONTA WHERE fk_grupo_acesso = 2;
-- 2 RESULTS.