Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda melakukan gabungan kiri dalam Doktrin ORM apabila anda perlu mendapatkan semula sejarah pengguna, termasuk kredit semasa dan sejarah kredit?

Bagaimanakah anda melakukan gabungan kiri dalam Doktrin ORM apabila anda perlu mendapatkan semula sejarah pengguna, termasuk kredit semasa dan sejarah kredit?

Linda Hamilton
Linda Hamiltonasal
2024-10-27 12:13:30881semak imbas

How do you perform left joins in Doctrine ORM when you need to retrieve a user's history, including current credits and credit history?

Cara Melakukan Gabungan Kiri dalam Doktrin

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.

Perihalan Masalah

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.

Penyelesaian

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn