我正在快速使用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();
}
如何在find
操作期间单独阻止Place获取其建筑物关系?有什么东西我可以传递到Query实例来阻止这个吗?
答案 0 :(得分:-1)
为您的地图添加fetch
选项。
像这样:
课程地点{
/** * Reverse mapping * @var Person * * @ORM\OneToOne(targetEntity="Person", mappedBy="Home", fetch="EXTRA_LAZY") */ private $Resident;
}