Я создал пакет с тестовым объектом, который содержит несколько объектов testQuestion, каждый из которых является вопросом и заданным ответом (или 0, если нет ответа ).Из ветки я хочу получить информацию от тестового объекта, чтобы сказать, сколько вопросов есть и на сколько были даны ответы.
Я создал запрос, чтобы вытащить это из базы данных, и в тестовом объекте я создал 2 новых свойства для хранения количества вопросов и числа ответов. Я создал TestRepository, внутри которого находится запрос. Объект Test проверяет, имеет ли объект установленное значение, и, если не загружает его, когда это необходимо, поскольку мне не всегда нужна эта информация.
Однако я застрял в том, как связать код репозитория с тестовым объектом, как для вызова функции репо, так и для функции репо для сохранения значений в соответствующий тестовый объект.
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 (Существует метод сопоставления для 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);
}