Jeg vil antage, at du kun har brug for disse felter og ikke dine AdminGoals
enhed. På dit AdminGoalsRepository
du kan gøre noget som dette:
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();
}
Husk, at returobjektet vil være en række rækker, hver række er en tilknyttet matrix med nøgler som tilknytningerne ovenfor.
Rediger
Efter at have opdateret spørgsmålet, vil jeg ændre min foreslåede funktion, men vil forlade ovenstående eksempel, hvis andre mennesker gerne vil se forskellen.
Først og fremmest, da dette er en ensrettet ManyToOne mellem AdminSavings
og AdminGoals
, skal den tilpassede forespørgsel være i AdminSavingsRepository
(ikke som ovenfor ). Også, da du ønsker et aggregeret felt
dette vil "brud" henter nogle af dine data. Prøv at forblive så meget OOP, når du ikke kun gengiver skabeloner.
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'];
[...]
}
[...]
}