それぞれ質問と与えられた答えであるtestQuestionオブジェクトの数を保持するテストオブジェクトを持つバンドルを設定しました。 )。私は小枝から、テストオブジェクトからの情報を取得して、そこにいくつの質問があり、どれだけ答えられたのかを知りたいと思っています。Symfony2/Doctrineエンティティ内の関連するオブジェクトの数を格納する方法
これをdbから取り除くためのクエリを作成しました。テストエンティティでは、2つの新しいプロパティを作成して、質問数と回答数を格納しました。クエリが存在するTestRepositoryを作成しました。 Testオブジェクトはオブジェクトに値が設定されているかどうかをチェックし、必要であればロードしません。常にこの情報が必要なわけではありません。
しかし、リポジトリコードをテストオブジェクトにリンクする方法については、repo関数を呼び出して、関連するテストオブジェクトに値を保存するためにrepo関数を呼び出すことができません。
アクメ/ Quizbundle /試験/ test.phpを
namespace Acme\QuizBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Acme\QuizBundle\Entity\TestRepository;
/**
* @ORM\Entity(repositoryClass="Acme\QuizBundle\Entity\TestRepository")
* @ORM\Table(name="test")
*/
class Test {
protected $numQuestions = null;
protected $numQuestionsAnswered = null;
public function getNumQuestionsAnswered() {
if (is_null($this->numQuestionsAnswered)) {
$repository = $this->getEntityManager()->getRepository('\AcmeQuizBundle\Test');
$values = $repository->calculateNumQuestions();
}
return $this->numQuestionsAnswered;
}
アクメ/ Quizbundle /試験/ TestRepository.php(getNumQuestionsためのマッチング方法は、(あります))
namespace Acme\QuizBundle\Entity;
use Doctrine\ORM\EntityRepository;
class TestRepository extends EntityRepository {
private function calculateNumQuestions() {
$qb = $this->getEntityManager()
->createQueryBuilder();
$query = $this->getEntityManager()->createQueryBuilder()
->select('COUNT(id)')
->from('testquestion', 'tq')
->where('tq.test_id = :id')
->setParameter('id', $this->getId())
->getQuery();
$result = $query->getSingleScalarResult();
var_dump($result);
}
ありがとう、本当に助かりました –
注意!余分な怠惰な関連付けでは、組み込みの小枝** 'lenght'の代わりに' Collection#count() 'コール**を使わなければなりません。 **正しい方法は、SQLのカウントを使用します:** '{{testEntity.questionsAnswered.count}}'( 'length'はメモリ内の行を取得します!) –
@Sanya_Zolを修正していただきありがとうございます。 –