我正在加快使用 Symfony 2 和 Doctrine 的速度,并且在执行不必要的数据库查找以与连接实体进行水合时遇到困难。
在使用子对象执行连接查询后,子对象会自动从数据库中提取其其他映射。尽管我没有尝试访问它的任何属性,但它正在这样做。就好像它们在find查询中被访问。
我的示例如下所示 - 有一些实体被调用Person并且Building它们都加入了一个名为Place:
class Person {
    /**
     * Where this person lives
     * @var Place $Home
     * 
     * @ORM\OneToOne(targetEntity="Place", cascade={"persist"}, inversedBy="Resident" )
     * @ORM\JoinColumn(name="place_id", referencedColumnName="id")
     */
    private $Home;
}
class Building {
    /**
     * Where this building stands
     * @var Place $Site
     * 
     * @ORM\OneToOne(targetEntity="Place", cascade={"persist"}, inversedBy="Landmark" )
     * @ORM\JoinColumn(name="place_id", referencedColumnName="id")
     */
    private $Site;
}
class Place {
    /**
     * Reverse mapping
     * @var Person $Resident
     * 
     * @ORM\OneToOne(targetEntity="Person", mappedBy="Home")
     */   
    private $Resident;
    /**
     * Reverse mapping
     * @var Building $Landmark
     * 
     * @ORM\OneToOne(targetEntity="Building", mappedBy="Site")
     */   
    private $Landmark;
}
我的人存储库加入如下所示:
/**
 * @override
 * @return Person
 */
public function find( $id ){
    $query = $this->getEntityManager()
        ->createQuery('
            SELECT p, h
            FROM MyBundle:Person p
            JOIN p.Home h
            WHERE p.id = :id'
        )->setParameter('id', $id);
    return $query->getSingleResult();
}
如何防止 Place 在find操作过程中单独获取其 Building 关系?有什么我可以传递给 Query 实例来阻止这种情况的吗?