मैं एक बंडल एक परीक्षण वस्तु जो testQuestion के एक नंबर वस्तुओं, जिनमें से प्रत्येक एक सवाल और जवाब दिया (या 0 कोई जवाब नहीं है, तो है रखती है की स्थापना की है के भीतर संबंधित वस्तुओं की गिनती स्टोर करने के लिए)। टहनी से मैं परीक्षण वस्तु से जानकारी प्राप्त करने में सक्षम होना चाहता हूं कि यह कहने के लिए कि कितने प्रश्न हैं और कितने उत्तर दिए गए हैं।Symfony2/सिद्धांत कैसे एक इकाई
मैं db के बाहर इस खींचने के लिए एक प्रश्न बनाया है, और टेस्ट इकाई में 2 नए गुणों बनाया है प्रश्नों की संख्या स्टोर करने के लिए और संख्या जवाब दे दिया। मैंने एक टेस्ट रिपोजिटरी बनाई है जिसमें क्वेरी रहती है। टेस्ट ऑब्जेक्ट यह देखने के लिए जांच करता है कि क्या ऑब्जेक्ट का मान सेट है और यदि आवश्यक हो तो इसे लोड नहीं किया जाता है क्योंकि मुझे हमेशा इस जानकारी की आवश्यकता नहीं होगी।
हालांकि मैं कैसे परीक्षण वस्तु को भंडार कोड से जोड़ने के लिए पर अटक कर रहा हूँ, दोनों रेपो समारोह कॉल करने के लिए और रेपो समारोह के लिए प्रासंगिक टेस्ट ऑब्जेक्ट के लिए मूल्यों को बचाने के लिए।
एक्मे/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
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);
}
धन्यवाद, यह वास्तव में उपयोगी है –
सावधान रहें !! 1 अतिरिक्त आलसी संगठनों के साथ आपको अंतर्निहित ट्विग ** 'lenght' के बजाय 'संग्रह # गिनती()' कॉल ** का उपयोग करना होगा। ** सही तरीका है कि एसक्यूएल COUNT का उपयोग करेगा: ** '{{testEntity.questionsAnswered.count}}' ('| length' स्मृति में पंक्तियों को लाते समय का कारण होगा!) –
सुधार @Sanya_Zol, तदनुसार जवाब अद्यतन के लिए धन्यवाद –