Symfony2 / Doctrine Jak przechowywać liczbę powiązanych obiektów w jednostce
Skonfigurowałem pakiet zawierający obiekt testowy, który przechowuje wiele obiektów testQuestion, z których każdy jest pytaniem i odpowiedzią (lub 0, jeśli nie ma odpowiedzi). Z gałązki chcę uzyskać informacje z obiektu testowego, aby powiedzieć, ile jest pytań i ile odpowiedzi zostało udzielonych.
Stworzyłem zapytanie, aby wyciągnąć to z bazy danych, aw jednostce testowej utworzyłem 2 nowe właściwości, aby zapisać liczbę pytań i odpowiedzieć na numer. Utworzono repozytorium testowe, w którym znajduje się zapytanie. Obiekt testowy sprawdza, czy obiekt ma ustawioną wartość, a jeśli nie, ładuje go w razie potrzeby, ponieważ nie zawsze potrzebuję tych informacji.
Jednak utknąłem na tym, jak połączyć kod repozytorium z obiektem testowym, zarówno w celu wywołania funkcji repo, jak i funkcji repo, aby zapisać wartości w odpowiednim obiekcie testowym.
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 (Istnieje metoda dopasowania dla 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);
}