0

我想获取用户所在的学校,但由于某种原因,我只能通过对不相关的学校表运行查询来访问它。这是我的代码:

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

$schoolsEnrolled = $this->getUser()->getSchools();

结果是一个带有 School 对象的数组,它的所有属性都为 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 类中:

public function getSchool()
{
    return $this->school;
}

如果没有不相关的查询,我怎样才能让我关心的查询正常工作?

4

2 回答 2

1

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

于 2013-06-10T05:04:03.360 回答
0

正确的方法之一是这样

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

$entities = $em->getRepository('YourBundle:YourEntity')->findAll();
于 2013-06-10T04:55:45.020 回答