Symfony2 / Doctrine Speichern der Anzahl verwandter Objekte in einer Entität

Ich habe ein Bundle mit einem Testobjekt eingerichtet, das eine Reihe von testQuestion-Objekten enthält, von denen jedes eine Frage und die angegebene Antwort (oder 0, wenn keine Antwort) ist. Von twig möchte ich in der Lage sein, die Informationen aus dem Testobjekt zu erhalten, um zu sagen, wie viele Fragen es gibt und wie viele beantwortet wurden.

Ich habe eine Abfrage erstellt, um diese aus der Datenbank zu ziehen, und in der Testentität habe ich zwei neue Eigenschaften erstellt, um die Anzahl der Fragen und die Anzahl der beantworteten Fragen zu speichern. Ich habe ein TestRepository erstellt, in dem sich die Abfrage befindet. Das Testobjekt prüft, ob für das Objekt der Wert festgelegt ist, und lädt ihn gegebenenfalls, da ich diese Informationen nicht immer benötige.

Ich bin jedoch nicht sicher, wie ich den Repository-Code mit dem Testobjekt verknüpfen soll, um sowohl die Repo-Funktion aufzurufen als auch die Repo-Funktion, um die Werte im entsprechenden Testobjekt zu speichern.

Acme / Quizbundle / Test / 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;
}

Acme / Quizbundle / Test / TestRepository.php (Es gibt eine passende Methode für 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);
    }

Antworten auf die Frage(1)

Ihre Antwort auf die Frage