Saya akan menganggap Anda hanya membutuhkan bidang ini dan bukan AdminGoals
Anda kesatuan. Di AdminGoalsRepository
. Anda Anda dapat melakukan sesuatu seperti ini:
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();
}
Perlu diingat bahwa objek yang dikembalikan akan berupa larik baris, setiap baris adalah larik terkait dengan kunci seperti pemetaan di atas.
Sunting
Setelah memperbarui pertanyaan, saya akan mengubah fungsi yang disarankan tetapi akan meninggalkan contoh di atas jika orang lain ingin melihat perbedaannya.
Hal pertama yang pertama, karena ini adalah ManyToOne searah antara AdminSavings
dan AdminGoals
, kueri khusus harus berada di AdminSavingsRepository
(tidak seperti di atas ). Selain itu, karena Anda menginginkan bidang gabungan
ini akan "hancur" beberapa pengambilan data Anda. Cobalah untuk tetap menggunakan OOP sebanyak mungkin saat Anda tidak hanya merender template.
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'];
[...]
}
[...]
}