Cara Melaksanakan Gabungan Kiri dalam Doktrin: Menangani Ralat Sintaks dan Hasil Yang Tidak Dijangka
Dalam Doktrin, gabungan kiri membolehkan anda mendapatkan semula data daripada dua atau lebih jadual manakala pilihan termasuk baris dari jadual kiri walaupun tiada baris yang sepadan dalam jadual kanan. Untuk melakukan gabungan kiri, anda boleh menggunakan kaedah leftJoin.
Walau bagaimanapun, anda mungkin menghadapi beberapa masalah semasa melakukan gabungan kiri. Mari kita atasi isu biasa dan berikan penyelesaian.
Isu:
"Ralat Sintaks: Doktrin yang DiharapkanORMQueryLexer::T_WITH, mendapat 'ON'
Penjelasan:
Dalam kod asal anda, anda menggunakan 'ON' dan bukannya 'WITH' dalam kaedah leftJoin Sintaks yang betul untuk gabungan kiri ialah:
$qb->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id')
Dikemas kini. Kod:
Menggantikan 'ON' dengan 'WITH' dalam kod di atas akan menyelesaikan ralat sintaks.
Isu Lain:
"Hanya 1 nilai daripada lajur bercantum sedang dipaparkan."
Penjelasan:
Jika anda mempunyai perkaitan yang ditentukan antara jadual (CreditEntityUserCreditHistory#user dalam contoh anda), anda boleh menggunakan versi ringkas bagi join kiri:
$qb->leftJoin('a.user', 'u')
Ini akan melakukan gabungan kiri secara automatik berdasarkan perkaitan Jika tiada perkaitan ditakrifkan, anda boleh menggunakan sintaks yang lebih jelas:
$qb->leftJoin( 'User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id' )
Keputusan:
Caburan kiri akan menghasilkan set hasil yang merangkumi baris daripada kedua-dua jadual, dengan padanan pilihan daripada jadual kanan Hasilnya akan dikembalikan sebagai tatasusunan, di mana setiap elemen ialah tatasusunan entiti.
array( array( 0 => UserCreditHistory instance, 1 => User instance ), array( 0 => UserCreditHistory instance, 1 => User instance ), // ... )
Atas ialah kandungan terperinci Kiri Sertai dalam Doktrin: Bagaimana untuk Mengelakkan Ralat Sintaks dan Mendapatkan Hasil yang Dijangkakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!