Jag antar att du bara behöver dessa fält och inte dina AdminGoals
entitet. På ditt AdminGoalsRepository
du kan göra något så här:
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();
}
Tänk på att returobjektet kommer att vara en array av rader, varje rad är en associerad array med nycklar som mappningarna ovan.
Redigera
Efter att ha uppdaterat frågan kommer jag att ändra min föreslagna funktion men kommer att lämna exemplet ovan om andra skulle vilja se skillnaden.
Först till kvarn, eftersom detta är en enkelriktad ManyToOne mellan AdminSavings
och AdminGoals
, ska den anpassade frågan finnas i AdminSavingsRepository
(inte som ovan ). Dessutom, eftersom du vill ha ett aggregerat fält
detta kommer att "bryta" en del av dina data hämtas. Försök att hålla så mycket OOP när du inte bara renderar mallar.
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'];
[...]
}
[...]
}