Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

QueryBuilder/Doktrin Pilih bergabung dengan grupoleh

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'];
        [...]
    }
    [...]
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah aman menyimpan nama pengguna dan kata sandi di database?

  2. Kapan menggunakan kueri yang disiapkan PDO. kesalahan mysql_real_escape

  3. Apa manfaat terbesar menggunakan INDEXES di mysql?

  4. Penyisipan massal SQL berdasarkan data yang diambil dari tabel lain

  5. unggah banyak file ke server, dan tulis ke database