查询仅在我之前运行查询时才有效

时间:2013-06-10 04:30:24

标签: symfony controller doctrine

我想获得用户所在的学校,但出于某种原因,我只能通过向学校表运行查询来访问它,否则这些查询无关。这是我的代码:

这不起作用(在控制器内):

$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;
}

如何在没有无关查询的情况下获得我关心的查询?

2 个答案:

答案 0 :(得分:1)

在doctrine对象中可以延迟加载。然后你调用$schoolHasUser->getSchool();你没有查询数据库,只获取代理对象。因此,尝试获取它的一些属性,例如getName或getId。此操作会调用DB并获取对象。

答案 1 :(得分:0)

正确的方法之一就是这样

$em = $this->getDoctrine()->getManager();

$entities = $em->getRepository('YourBundle:YourEntity')->findAll();