Kueri doktrin 2 dengan banyak gabungan

Saya terjebak dengan pertanyaan dan saya berharap seseorang di luar sana mungkin dapat membantu dengan kode saya.

Kelas saya terlihat seperti ini:

Orang 1 ------- 1..* Partisipasi 1...* -------- 1 Acara

Sekarang saya memiliki atribut di kelas Acara yang disebut 'isActive' dan di Kelas Orang saya memiliki atribut 'isChecked'.

Dengan Kueri saya, saya ingin mengembalikan semua Orang 'isChecked' yang tidak berpartisipasi dalam Acara 'isActive'.

Ini adalah Permintaan saya sejauh ini, tetapi tidak mengembalikan apa yang saya butuhkan:

$query = $em->createQueryBuilder('c')
        ->select('p')
        ->from('AppBundle:Person', 'p')
        ->andWhere('p.isChecked = true')
        ->leftJoin('p.participation', 'pa')
        ->andWhere('pa IS NULL')
        ->leftJoin('pa.event', 'e')
        ->andWhere('e.isActive = true');

Jika ada yang bisa memberi tahu saya, apa yang saya lakukan salah di sini, pasti luar biasa.

Salam Hormat, Sebastian


person Sebastian271    schedule 12.06.2018    source sumber


Jawaban (1)


Anda perlu mengubah bagian penggabungan Anda dengan menggunakan klausa WITH, hapus ->andWhere('e.isActive = true') dari filter mana dan pindahkan klausa ini ke bagian penggabungan entitas Anda, sehingga hanya peristiwa (baris yang digabungkan dengan pa) yang dikembalikan yang ditandai sebagai isActive.

DQL

SELECT p
FROM AppBundle:Person p
LEFT JOIN p.participation pa
LEFT JOIN pa.event e WITH e.isActive = true
WHERE p.isChecked = true
AND pa IS NULL

Di pembuat kueri, Anda dapat merepresentasikannya sebagai

$query = $em->createQueryBuilder('c')
        ->select('p')
        ->from('AppBundle:Person', 'p')
        ->leftJoin('p.participation', 'pa')
        ->leftJoin('pa.event', 'e','WITH', 'e.isActive = true')
        ->andWhere('p.isChecked = true')
        ->andWhere('pa IS NULL');
person M Khalid Junaid    schedule 12.06.2018
comment
Terima kasih banyak Pak! :-) ./busur - person Sebastian271; 12.06.2018