मुझे लगता है कि आपको केवल इस फ़ील्ड की आवश्यकता है, न कि आपके AdminGoals
कंपनी। आपके AdminGoalsRepository
. पर आप ऐसा कुछ कर सकते हैं:
public function getGoalsByUser(User $user)
{
$qb = $this->createQueryBuilder('goal');
$qb->select('SUM(savings.value) AS savings_value')
->addSelect('goal.created')
->addSelect('goal.description')
->addSelect('goal.goalDate')
->addSelect('goal.value')
->addSelect('goal.budgetCat') //is this an entity? it will be just an ID
->join('goal.adminSavings', 'savings', Join::WITH))
->where($qb->expr()->eq('goal.user', ':user'))
->groupBy('goal.id')
->setParameter('user', $user);
return $qb->getQuery()->getScalarResult();
}
ध्यान रखें कि रिटर्न ऑब्जेक्ट पंक्तियों की एक सरणी होगी, प्रत्येक पंक्ति एक संबद्ध सरणी है जिसमें ऊपर की मैपिंग जैसी कुंजी होती है।
संपादित करें
प्रश्न को अपडेट करने के बाद, मैं अपने सुझाए गए कार्य को बदलने जा रहा हूं, लेकिन यदि अन्य लोग अंतर देखना चाहते हैं तो उपरोक्त उदाहरण को छोड़ने जा रहा हूं।
सबसे पहले चीज़ें, क्योंकि यह AdminSavings
. के बीच एक दिशाहीन कई टूवन है और AdminGoals
, कस्टम क्वेरी AdminSavingsRepository
. में होनी चाहिए (ऊपर पसंद नहीं है ) साथ ही, चूंकि आप एक एकत्रित फ़ील्ड
चाहते हैं यह "ब्रेक" . होगा आपके कुछ डेटा फ़ेचिंग। जब आप केवल टेम्प्लेट प्रस्तुत नहीं कर रहे हों तो अधिक से अधिक OOP रहने का प्रयास करें।
public function getSavingsByUser(User $user)
{
$qb = $this->createQueryBuilder('savings');
//now we can use the expr() function
$qb->select('SUM(savings.value) AS savings_value')
->addSelect('goal.created')
->addSelect('goal.description')
->addSelect('goal.goalDate')
->addSelect('goal.value')
->addSelect('goal.budgetCat') //this will be just an ID
->join('savings.goal', 'goal', Join::WITH))
->where($qb->expr()->eq('goal.user', ':user'))
->groupBy('goal.id')
->setParameter('user', $user);
return $qb->getQuery()->getScalarResult();
}
बोनस
public function FooAction($args)
{
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
//check if user is User etc depends on your config
...
$savings = $em->getRepository('AcmeBundle:AdminSavings')->getSavingsByUser($user);
foreach($savings as $row) {
$savings = $row['savings_value'];
$goalId = $row['id'];
$goalCreated = $row['created'];
[...]
}
[...]
}