类型为' AppBundle \ Entity \ User'的实体找不到ID id(155)

时间:2016-11-15 16:42:08

标签: php symfony doctrine

当我遍历一个组的用户(组#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();
}

2 个答案:

答案 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.