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

Doctrine QueryBuilder:Hubungan ManyToOne di mana lebih dari satu subEntitas harus cocok

Anda tidak melakukannya dengan benar, Anda mencocokkan label dan nilai dengan nilai filter terakhir karena placeholder :label , :value yang digunakan dalam kueri tidak unik untuk setiap iterasi loop, jadi semua klausa yang dihasilkan oleh loop akan cocok dengan label dan nilai terakhir.

Untuk mendapatkan pekerjaan yang masing-masing propertinya cocok dengan filter yang disediakan, Anda dapat menulis seperti kueri doktrin di bawah ini.

Pertama itu akan mengumpulkan semua label dan nilai dalam array terpisah dan kemudian akan cocok dengan properti pekerjaan dengan menggunakan IN() operasi, terakhir untuk mendapatkan pekerjaan yang propertinya cocok dengan semua filter, Anda perlu membangun agregasi untuk menghitung hasil yang cocok dan harus sama dengan jumlah filter

$qb =  $this->getDoctrine()
            ->getRepository('AppBundle:Job')
            ->createQueryBuilder('job')
            ->innerJoin('job.properties','p');
$labels = array();
$values = array();
foreach($filters as $label => $value)
{
    $labels[] = $label;
    $values[] = $value;
}
$qb->addSelect('COUNT(DISTINCT  p.id) AS total_properties')
   ->andWhere('p.label IN (:labels)')
   ->andWhere('p.value IN (:values)')
   ->addGroupBy('job.id')
   ->having('total_properties = '.count($filters))
   ->setParameter('labels',$labels)
   ->setParameter('values',$values)
   ->getQuery()
   ->getResult();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. gcc tidak akan mengkompilasi dan menjalankan perpustakaan MySQL C

  2. Bagaimana cara mendapatkan ukuran database MySQL?

  3. Penyebaran basis data dengan pembaruan

  4. Bagaimana Fungsi LPAD() Bekerja di MySQL

  5. Cara menginstal MySQLdb di Mountain Lion