我的数据库结构如下所示:
用户<->个人<->学校
因此,个人对象会像这样保存有关用户和学校的信息:
class Personal { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\ManyToOne(targetEntity="user", inversedBy="schools", fetch="EAGER") */ private $user; /** * @var string * * @ORM\ManyToOne(targetEntity="school", inversedBy="personal", fetch="EAGER") */ private $school; }
所以我想获取用户的学校:
$query = $qb ->select('school') ->from('AppBundle:School', 'school') ->leftJoin('school.personal', 'p', 'WITH', 'p.user = :user') ->setParameters(array(':user' => $user)) ->getQuery();
我还尝试了以下方法:
$query = $qb ->select('school') ->from('AppBundle:School', 'school') ->leftJoin('u.personal', 'personal') ->leftJoin('personal.user', 'pu') ->where('pu = :user') ->setParameters(array(':user' => $user)) ->getQuery();
但是什么都行不通。第一回给我所有学校:S。第二个查询没有退学!:(
如何获得所有学校的用户?
您的第二次尝试几乎可以做到:
$query = $qb ->select('school') ->from('AppBundle:School', 'school') ->leftJoin('school.personal', 'personal') ->leftJoin('personal.user', 'user') ->where('user.id = :userId') ->setParameters(array(':userId' => $user->getId())) ->getQuery();