Symfonyの「本」では、他のエンティティを参照してエンティティについて説明しています。私の場合のように、それを参照する多くの「コメント」エンティティを持つ「投稿」エンティティがある場合、そのIDで投稿をロードしてから、$ post-> getComments()を実行できます。
コメントは遅延ロードされているようです。1つずつロードしてそれぞれをロードするか(明らかに間違っています)、すべてを個別のクエリでロードする必要があります(これは可能ですが、私はしません具体的には、そのクエリをどこに配置するかわからない)。ただし、この本は次のように示唆しています。「もちろん、両方のオブジェクトにアクセスする必要があることが事前にわかっている場合は、元のクエリで結合を発行することで2番目のクエリを回避できます。」(現在空の)postRepositoryクラスにメソッドを追加することをお勧めします。私はそうします、そしてそれはこのように見えます:
public function loadPostFull($pid)
{
return $this->getEntityManager()
->createQuery('
SELECT p, c FROM BUNDLENAME:Post p
JOIN p.comments c
WHERE p.id = :id')
->setParameter('id', $pid);
try {
return $query->getSingleResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
そして、私のコントローラーで私はします:
$fullPost = $this->getDoctrine()
->getRepository('BUNDLENAME:Post')
->loadPostFull($id);
$id = $fullPost->getId();
しかし、$ idに対する私の単純な要求は、「致命的なエラー:未定義のメソッドDoctrine \ ORM \ Query :: getId()の呼び出し」を示します。名前を入力すると失敗するため、コントローラーがloadPostFullメソッドを正しく検出していることはわかっています。適切なPostエンティティを返さないだけです。-> loadPostFull($ id)ではなく-> find($ id)を呼び出すようにコントローラーを変更すると、Postidのすべての内部メソッドを使用できます。
マニュアルは私がそれをすることができると示しているようです!どうしたの?