Ich gehe davon aus, dass Sie nur diese Felder benötigen und nicht Ihre AdminGoals
Einheit. In Ihrem AdminGoalsRepository
Sie können so etwas tun:
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();
}
Denken Sie daran, dass das Rückgabeobjekt ein Array von Zeilen ist, jede Zeile ist ein zugeordnetes Array mit Schlüsseln wie den obigen Zuordnungen.
Bearbeiten
Nachdem ich die Frage aktualisiert habe, werde ich meine vorgeschlagene Funktion ändern, aber das obige Beispiel verlassen, wenn andere Leute den Unterschied sehen möchten.
Das Wichtigste zuerst, da dies ein unidirektionales ManyToOne zwischen AdminSavings
ist und AdminGoals
, sollte sich die benutzerdefinierte Abfrage im AdminSavingsRepository
befinden (nicht wie oben ). Außerdem möchten Sie ein aggregiertes Feld
dies wird "brechen" einige Ihrer Daten abrufen. Versuchen Sie, so viel OOP zu bleiben, wenn Sie nicht nur Vorlagen rendern.
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();
}
Bonus
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'];
[...]
}
[...]
}