我想获得用户所在的学校,但出于某种原因,我只能通过向学校表运行查询来访问它,否则这些查询无关。这是我的代码:
这不起作用(在控制器内):
$schoolsEnrolled = $this->getUser()->getSchools();
结果是一个带有School对象的Array,其所有属性为null(由于某种原因除了id之外)。
这确实有效(在控制器内):
//unrelated query
$repository = $this->getDoctrine()->getRepository('AcmeMainBundle:School');
$query = $repository->createQueryBuilder('s')->getQuery();
$schools = $query->getResult();
//the query I care about
$schoolsEnrolled = $this->getUser()->getSchools();
根据需要,结果是一系列学校。
在学校班级:
public function getSchools(){
$schools = array();
foreach ($this->schoolHasUsers as $key=>$schoolHasUser){
$schools[] = $schoolHasUser->getSchool();
}
return $schools;
}
在SchoolHasUser Class:
public function getSchool()
{
return $this->school;
}
如何在没有无关查询的情况下获得我关心的查询?
答案 0 :(得分:1)
在doctrine对象中可以延迟加载。然后你调用$schoolHasUser->getSchool();
你没有查询数据库,只获取代理对象。因此,尝试获取它的一些属性,例如getName或getId。此操作会调用DB并获取对象。
答案 1 :(得分:0)
正确的方法之一就是这样
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('YourBundle:YourEntity')->findAll();