0

ユーザーが所属している学校を取得したいのですが、何らかの理由で学校テーブルへのクエリを実行することによってのみアクセスできます。これは、他の方法では無関係です。これが私のコードです:

これは機能しません(コントローラー内):

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

結果は、(何らかの理由で id 以外の) すべてのプロパティが null の School オブジェクトを含む配列になります。

これは機能します(コントローラー内):

//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

それを行う適切な方法の1つはこのようなものです

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

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