Mysql
 sql >> база данни >  >> RDS >> Mysql

QueryBuilder/Doctrine Изберете присъединяване към групата

Предполагам, че имате нужда само от тези полета, а не от вашите 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();
}

Имайте предвид, че върнатият обект ще бъде масив от редове, като всеки ред е свързан масив с ключове като съпоставянията по-горе.

Редактиране

След като актуализирам въпроса, ще променя предложената от мен функция, но ще оставя горния пример, ако други хора искат да видят разликата.

Най-напред, тъй като това е еднопосочен ManyToOne между 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. Може ли log4jdbc да се използва с пружинно зареждане?

  2. Вмъкване на данни с таблици за свързване

  3. MySQL:Неправилен ключов файл за таблица '/tmp/#sql_185e_0.MYI', опитайте се да го поправите

  4. MySql Актуализирането на една таблица от друга е неуспешно

  5. mysql errno:150 „Ограничението за чужд ключ е формирано неправилно“ - MariaDB