Symfony 使用DQL优化条令查询
我在代码中使用了一个简单的查询,它在所有情况下都能正常工作。这意味着如果用户没有照片(例如),查询将正常进行:Symfony 使用DQL优化条令查询,symfony,optimization,doctrine-orm,doctrine,dql,Symfony,Optimization,Doctrine Orm,Doctrine,Dql,我在代码中使用了一个简单的查询,它在所有情况下都能正常工作。这意味着如果用户没有照片(例如),查询将正常进行: $user=$em->getRepository('UserBundle:User')->findOneById($id_user); 实体用户与其他实体有很多关系,这就是优化查询数量以避免Doctrine延迟加载的原因。然后我使用QueryBuilder使用DQL进行此查询: public function findUsuario($id_user){ $em
$user=$em->getRepository('UserBundle:User')->findOneById($id_user);
实体用户与其他实体有很多关系,这就是优化查询数量以避免Doctrine延迟加载的原因。然后我使用QueryBuilder使用DQL进行此查询:
public function findUsuario($id_user){
$em = $this->getEntityManager();
$qb = $em->createQueryBuilder();
$qb->select('u, p, co, ci, f, s, q, b, r, se, com, t, beb, prof, v, h, i, idi, usf')
->from('UserBundle:User', 'u')
->innerJoin("u.pais", 'p')
->innerJoin("u.comunidad", 'co')
->innerJoin("u.ciudad", 'ci')
->innerJoin("u.fotos", 'f')
->innerJoin("u.sexo", 's')
->innerJoin("u.quiero", 'q')
->innerJoin("u.busco", 'b')
->innerJoin("u.relacionPareja", 'r')
->innerJoin("u.sexualidad", 'se')
->innerJoin("u.complexion", 'com')
->innerJoin("u.tabaco", 't')
->innerJoin("u.bebida", 'beb')
->innerJoin("u.profesion", 'prof')
->innerJoin("u.vivienda", 'v')
->innerJoin("u.hijo", 'h')
->innerJoin("u.ingreso", 'i')
->innerJoin("u.idiomas", 'idi')
->innerJoin("u.usuarioFavoritos", 'usf')
->where('u.id = :id')
->setParameter('id', $id_user);
$query= $qb->getQuery();
return $query->getSingleResult();
}
当用户拥有所有相关实体的信息时,这种方法很有效,但如果例如用户没有照片,则会出现以下异常:“虽然至少需要一行,但未找到查询结果”
我不明白为什么,有人能解释一下吗?感谢当您希望所有行的数据都位于关系的另一侧时,应该使用内部联接,如果关系的另一侧不存在数据,则该行将被忽略 您可以找到有关不同类型联接的更多详细信息 您需要使用
leftJoin
方法,而不是innerJoin
方法
(另外,您还有一个更大的问题:您有太多的联接,我建议您检查实体的组织。)这就是问题所在,现在可以正常工作了。谢谢关于多个连接是因为每个用户都有许多属性,但这是应用程序类型的固有属性。