Php 找不到id为(155)的“AppBundle\Entity\User”类型的实体
当我迭代一组groupusers的用户时,显示用户电子邮件是一种多人关系,我得到的id155的“AppBundle\Entity\User”类型的错误实体没有找到。但是,当我显示引发异常的用户时,我看到:Php 找不到id为(155)的“AppBundle\Entity\User”类型的实体,php,symfony,doctrine,Php,Symfony,Doctrine,当我迭代一组groupusers的用户时,显示用户电子邮件是一种多人关系,我得到的id155的“AppBundle\Entity\User”类型的错误实体没有找到。但是,当我显示引发异常的用户时,我看到: // In my controller dump($groups[0]->getUser()); // Output User {#761 ▼ +__isInitialized__: false #id: 155 #email: null #firstName: nul
// 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
想出来了!!实际上,有一个启用的条令过滤器,它在每个sql查询中添加一个条件。当我得到一个组时,与它相关的用户不会从数据库中加载,只有它的id被加载到组实体中。当我尝试访问id以外的其他用户字段时,它将执行sql连接查询。同样,条令过滤器甚至将条件添加到连接条件中,这将导致一个空结果
因此,错误消息显然是误导性的。我发现有问题的表中有孤儿,出于某种原因,删除对象不是级联的 就我而言: 从ID=2的访问组中选择*; -0个结果。 从组中选择*,其中fk\u grupo\u ACESSO=2; -2结果。
如何加载组->用户关联?似乎延迟加载用户未处于活动状态。无论如何,我推荐一个自定义存储库获取连接以提高性能。您是如何修复它的?有几种解决方案:1-动态删除筛选器编辑原则查询2-执行本机查询,原则筛选器不会对其进行编辑。例如,您指的是从EntityReporto查找或查找方法吗?因为我正在使用它们,我得到了错误。我不知道该如何改变我的方法,我认为这可能是另一个解决方案:-?
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();
}