Artikel ini membincangkan isu melaksanakan gabungan kiri dalam Doctrine ORM, pemeta hubungan objek (ORM) yang berkuasa untuk PHP. Persoalan timbul apabila pembangun cuba memaparkan kredit semasa pengguna bersama sejarah kredit mereka.
Coretan kod yang disediakan mempamerkan percubaan untuk mencipta fungsi getHistory yang mendapatkan semula sejarah pengguna, termasuk kredit semasa dan sejarah kredit mereka. Walau bagaimanapun, ia menghadapi ralat sintaks apabila menggunakan pernyataan LEFT JOIN.
Untuk menyelesaikan ralat, sintaks untuk melaksanakan cantuman kiri dalam Doktrin hendaklah dilaraskan. Terdapat dua pendekatan utama bergantung pada sama ada persatuan wujud antara entiti.
Pendekatan 1: Dengan Persatuan
Jika persatuan tersedia daripada UserCreditHistory kepada Pengguna, perkara berikut sintaks boleh digunakan:
<code class="php">public function getHistory($users) { $qb = $this->entityManager->createQueryBuilder(); $qb ->select('a', 'u') ->from('Credit\Entity\UserCreditHistory', 'a') ->leftJoin('a.user', 'u') ->where('u = :user') ->setParameter('user', $users) ->orderBy('a.created_at', 'DESC'); return $qb->getQuery()->getResult(); }</code>
Dalam senario ini, LEFT JOIN dan JOIN menghasilkan hasil yang sama kerana syarat digunakan pada hasil gabungan.
Pendekatan 2: Tanpa Persatuan
Jika tiada perkaitan daripada UserCreditHistory kepada Pengguna, sintaksnya berbeza sedikit:
<code class="php">public function getHistory($users) { $qb = $this->entityManager->createQueryBuilder(); $qb ->select('a', 'u') ->from('Credit\Entity\UserCreditHistory', 'a') ->leftJoin( 'User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id' ) ->where('u = :user') ->setParameter('user', $users) ->orderBy('a.created_at', 'DESC'); return $qb->getQuery()->getResult(); }</code>
Ini akan menghasilkan set hasil yang merangkumi kedua-dua UserCreditHistory dan kejadian Pengguna.
Atas ialah kandungan terperinci Bagaimanakah anda melakukan gabungan kiri dalam Doktrin ORM apabila anda perlu mendapatkan semula sejarah pengguna, termasuk kredit semasa dan sejarah kredit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!