Rumah  >  Artikel  >  rangka kerja php  >  Cara menggunakan ORM untuk melaksanakan pertanyaan berkaitan berbilang jadual dalam ThinkPHP6

Cara menggunakan ORM untuk melaksanakan pertanyaan berkaitan berbilang jadual dalam ThinkPHP6

WBOY
WBOYasal
2023-06-20 09:18:123966semak imbas

Dengan pembangunan berterusan teknologi pembangunan perisian, ramai pembangun mengejar bukan sahaja kecekapan dan kepraktisan kod, tetapi juga kebolehbacaan dan kebolehselenggaraan kod. ORM (Pemetaan Perhubungan Objek) jelas dapat memenuhi permintaan ini. ORM boleh membantu kami memetakan data hubungan dalam pangkalan data kepada hubungan antara objek, dengan itu mengurangkan jumlah kod interaksi pangkalan data yang diperlukan oleh pengaturcara. Rangka kerja ThinkPHP6 menggunakan teknologi ORM untuk membolehkan pembangun mengendalikan pangkalan data hubungan dengan mudah. Artikel ini akan memperkenalkan cara menggunakan ORM untuk melaksanakan pertanyaan berkaitan berbilang jadual dalam ThinkPHP6.

1. Gunakan ORM untuk pertanyaan jadual tunggal

Sebelum menggunakan ORM untuk pertanyaan berkaitan berbilang jadual, kita perlu terlebih dahulu menguasai cara menggunakan ORM untuk pertanyaan jadual tunggal.

Sangat mudah untuk menggunakan ORM untuk menanyakan rekod dalam ThinkPHP6. Hanya nyatakan model yang sepadan dalam pengawal dan kemudian panggil kaedah dalam model. Sebagai contoh, kita perlu menanyakan data dalam jadual pelajar.

Pertama, buat fail model bernama Pelajar dalam direktori aplikasi. Dalam fail ini, takrifkan atribut jadual pelajar dengan mewarisi kelas hinkModel.

<?php

namespace appmodel;

use thinkModel;

class Student extends Model
{

}

Kemudian nyatakan model Pelajar dalam pengawal dan panggil kaedah pertanyaan sedia ada dalam model untuk melengkapkan pertanyaan jadual tunggal.

<?php

namespace appcontroller;

use appmodelStudent;

class StudentController
{
    public function index()
    {
        $student = new Student();
        $list = $student->select();
        dump($list);
    }
}

Selepas menjalankan kaedah indeks dalam pengawal, kita boleh melihat semua maklumat rekod dalam jadual pelajar pada halaman, yang sangat mudah.

2. Gunakan ORM untuk pertanyaan berkaitan berbilang jadual ringkas

Dalam ThinkPHP6, anda tidak perlu menulis pernyataan pertanyaan jadual bersama SQL secara manual untuk melaksanakan pertanyaan berkaitan pangkalan data. ORM akan menghuraikan perhubungan antara model secara automatik, dan kemudian secara automatik menjana pernyataan pertanyaan SQL yang sepadan. Pembangun tidak perlu memahami sintaks terperinci pernyataan SQL Mereka hanya perlu mentakrifkan hubungan dalam model, dan kemudian memanggil kaedah pertanyaan dalam pengawal untuk melengkapkan pertanyaan bersama berbilang jadual.

1. Pertanyaan korelasi satu dengan satu

Apabila terdapat hubungan satu dengan satu antara dua jadual pangkalan data, kita boleh menggunakan pertanyaan korelasi satu dengan satu. Sebagai contoh, dalam jadual pelajar, pelajar hanya boleh sepadan dengan satu kelas, jadi terdapat hubungan satu dengan satu antara dua jadual. Kita boleh menggunakan ORM untuk menanyakan maklumat dalam jadual pelajar dan menanyakan maklumat kelas yang dia ada.

Pertama, tentukan hubungan satu dengan satu antara dua jadual dalam model Pelajar.

<?php

namespace appmodel;

use thinkModel;

class Student extends Model
{
    public function grade()
    {
        return $this->hasOne('Grade', 'id', 'grade_id');
    }
}

Dalam kaedah perkaitan, parameter pertama 'Gred' mewakili jadual yang akan dikaitkan, parameter kedua 'id' mewakili medan yang berkaitan dalam jadual Gred dan parameter ketiga 'grade_id' mewakili medan Berkaitan dalam jadual Pelajar.

Kemudian panggil kaedah dengan dalam model dalam pengawal untuk menanyakan semua maklumat dalam jadual pelajar dan maklumat kelasnya.

<?php

namespace appcontroller;

use appmodelStudent;

class StudentController
{
    public function index()
    {
        $list = Student::with('grade')->select();
        dump($list);
    }
}

Dengan menggunakan ORM, kami boleh membuat pertanyaan dengan mudah semua maklumat dalam jadual pelajar dan maklumat berkaitan tentang kelas di mana ia berada. Kaedah ini adalah pertanyaan berkaitan satu sama satu.

2. Pertanyaan korelasi satu-ke-banyak

Apabila terdapat hubungan satu-ke-banyak antara dua jadual pangkalan data, kita boleh menggunakan pertanyaan korelasi satu-ke-banyak. Sebagai contoh, dalam jadual pelajar, kelas boleh mempunyai berbilang pelajar, dan terdapat hubungan satu dengan ramai. Kita boleh menggunakan ORM untuk menanyakan maklumat kelas dan menanyakan semua maklumat pelajar dalam kelas.

Pertama, tentukan perhubungan satu dengan banyak antara dua jadual dalam model Gred.

<?php

namespace appmodel;

use thinkModel;

class Grade extends Model
{
    public function student() 
    {
        return $this->hasMany('Student', 'grade_id', 'id');
    }
}

Dalam kaedah perkaitan, parameter pertama 'Pelajar' mewakili jadual yang akan dikaitkan, parameter kedua 'grade_id' mewakili medan yang berkaitan dalam jadual Pelajar dan parameter ketiga 'id' mewakili medan Berkaitan dalam jadual Gred.

Kemudian panggil kaedah dengan dalam model dalam pengawal untuk menanyakan maklumat semua pelajar dalam kelas.

<?php

namespace appcontroller;

use appmodelGrade;

class GradeController
{
    public function index()
    {
        $list = Grade::with('student')->select();
        dump($list);
    }
}

Kaedah ini ialah pertanyaan berkaitan satu-ke-banyak.

3 Gunakan ORM untuk melaksanakan berbilang pertanyaan perkaitan satu-ke-banyak

Apabila kita perlu menanyakan berbilang jadual perkaitan satu-ke-banyak semasa pembangunan, kita boleh menggunakan kaedah perkaitan bersarang bagi model itu. Sebagai contoh, jika kita kini perlu menanyakan maklumat tentang sekolah yang mempunyai berbilang kelas dan setiap kelas mempunyai berbilang pelajar, kita perlu menggunakan kaedah persatuan bersarang.

Pertama, tentukan hubungan satu dengan banyak dalam model Guru.

<?php

namespace appmodel;

use thinkModel;

class Teacher extends Model
{
    public function grade() 
    {
        return $this->hasMany('Grade', 'teacher_id', 'id');
    }
}

Kemudian tentukan persatuan satu-ke-banyak dalam model Gred.

<?php

namespace appmodel;

use thinkModel;

class Grade extends Model
{
    public function student() 
    {
        return $this->hasMany('Student', 'grade_id', 'id');
    }

    public function teacher() 
    {
        return $this->belongsTo('Teacher', 'teacher_id', 'id');
    }
}

Dalam kaedah perkaitan, belongsTo menunjukkan bahawa kunci asing model semasa dikaitkan dengan kunci utama jadual berkaitan model, iaitu kunci utama jadual Guru sepadan dengan medan teacher_id dalam jadual Gred.

Akhir sekali, panggil kaedah dengan dalam model dalam pengawal untuk menyelesaikan berbilang pertanyaan satu-ke-banyak yang berkaitan.

<?php

namespace appcontroller;

use appmodelTeacher;

class TeacherController
{
    public function index()
    {
        $list = Teacher::with([
            'grade' => function($query) {
                $query->with('student');
            }
        ])->select();
        dump($list);
    }
}

Melalui siri operasi di atas, kami boleh menyelesaikan beberapa pertanyaan berkaitan satu-ke-banyak.

Ringkasan

Kemunculan teknologi ORM telah mengurangkan kesukaran pembangunan program pada tahap tertentu ORM rangka kerja ThinkPHP6 menjadikan pembangun lebih fleksibel dan mudah dalam operasi pangkalan data. Memahami dan menguasai kaedah pengendalian ORM boleh menjadikan kami lebih cekap dan tepat dalam pertanyaan data, yang akan membawa kemudahan besar kepada pembangunan kami yang seterusnya.

Atas ialah kandungan terperinci Cara menggunakan ORM untuk melaksanakan pertanyaan berkaitan berbilang jadual dalam ThinkPHP6. 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