Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

QueryBuilder/सिद्धांत समूह में शामिल हों का चयन करें

मुझे लगता है कि आपको केवल इस फ़ील्ड की आवश्यकता है, न कि आपके 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'];
        [...]
    }
    [...]
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बिल्ड टाइम पर पॉपुलेटेड MySQL डॉकर इमेज कैसे बनाएं?

  2. एक पंक्ति में गैर-शून्य मानों की गणना करने के लिए MySQL क्वेरी

  3. MySQL पंक्तियों की सीमा की व्याख्या करें

  4. कैसे जांचें कि mysql क्वेरी php का उपयोग करके कोई परिणाम नहीं लौटाती है (रिकॉर्ड नहीं मिला)?

  5. गतिशील SQL में SQL इंजेक्शन को रोकना