我已经设置了一个包含一个测试对象的包,该测试对象包含许多 testQuestion 对象,每个对象都是一个问题和给定的答案(如果没有答案,则为 0)。从 twig 我希望能够从测试对象中获取信息,以说明有多少问题以及已经回答了多少问题。
我创建了一个查询以将其从数据库中提取出来,并在测试实体中创建了 2 个新属性来存储问题的数量和回答的数量。我创建了一个 TestRepository ,查询所在的位置。Test 对象检查对象是否设置了值,如果没有,则在需要时加载它,因为我并不总是需要这些信息。
但是,我坚持如何将存储库代码链接到测试对象,既要调用 repo 函数,又要让 repo 函数将值保存到相关的 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);
}