Rumah  >  Artikel  >  rangka kerja php  >  Bagaimana untuk melaksanakan operasi persatuan model ORM dalam ThinkPHP6?

Bagaimana untuk melaksanakan operasi persatuan model ORM dalam ThinkPHP6?

王林
王林asal
2023-06-12 09:45:231190semak imbas

ThinkPHP6 ialah rangka kerja pembangunan PHP yang sangat popular yang menyediakan banyak kaedah operasi ORM (Pemetaan Perhubungan Objek) yang mudah untuk memudahkan operasi pangkalan data, dan telah menambah kaedah perkaitan model ORM yang lebih kaya dalam versi terkini, menjadikan pembangunan Orang ramai boleh melakukan pertanyaan berkaitan dengan lebih mudah. operasi antara jadual pangkalan data.

Artikel ini akan memperkenalkan cara melaksanakan operasi persatuan model ORM dalam ThinkPHP6, termasuk operasi persatuan satu-ke-satu, satu-ke-banyak dan banyak-ke-banyak Ia juga akan menerangkan mekanisme pelaksanaan khusus operasi persatuan.

Operasi persatuan satu dengan satu

Operasi persatuan satu dengan satu merujuk kepada operasi yang hanya terdapat surat-menyurat satu dengan satu antara dua jadual. Sebagai contoh, kami mempunyai jadual pengguna (pengguna) dan jadual butiran pengguna (butiran pengguna). Setiap pengguna sepadan dengan rekod butiran pengguna.

Mula-mula, tentukan perkaitan satu dengan satu dalam kelas model:

namespace appmodel;

use thinkModel;

class User extends Model
{
    // 定义一对一关联方法
    public function detail()
    {
        return $this->hasOne('UserDetail');
    }
}

Apabila mentakrifkan perkaitan, kami menggunakan kaedah hasOne, yang mengembalikan contoh objek BelongsTo, mewakili model semasa Kelas "mempunyai" hubungan satu dengan satu yang menunjuk ke kelas model UserDetail.

Kemudian kami mentakrifkan kaedah perkaitan terbalik dalam kelas model UserDetail:

namespace appmodel;

use thinkModel;

class UserDetail extends Model
{
    // 定义反向关联方法
    public function user()
    {
        return $this->belongsTo('User');
    }
}

Dalam kelas model UserDetail, kami juga menggunakan kaedah belongsTo, yang akan mengembalikan contoh objek hasOne untuk mewakili semasa Perhubungan satu dengan satu di mana kelas model "kepunyaan" dalam kelas model Pengguna.

Sekarang kita boleh melakukan pertanyaan korelasi satu dengan satu melalui kaedah berikut:

// 查询用户信息,包括其详细信息
$user = User::with(['detail'])->find(1);

// 查询用户信息,只包括其详细信息
$user = User::with(['detail' => function($query){
    $query->field('user_id, address');
}])->find(1);

Dalam contoh di atas, kami menentukan model korelasi melalui kaedah dengan dan menanyakan maklumat pengguna menggunakan mencari kaedah. Hasil pertanyaan berkaitan akan dikembalikan dalam bentuk tatasusunan dan penapisan medan boleh dilakukan mengikut keperluan.

Operasi persatuan satu-ke-banyak

Operasi persatuan satu-ke-banyak bermakna rekod dalam satu jadual boleh sepadan dengan berbilang rekod dalam jadual lain. Sebagai contoh, kami mempunyai jadual kursus (kursus) dan jadual pelajar (pelajar) Setiap kursus boleh mempunyai beberapa pelajar yang mengambil elektif.

Mula-mula, tentukan persatuan satu-ke-banyak dalam kelas model Kursus:

namespace appmodel;

use thinkModel;

class Course extends Model
{
    // 定义一对多关联方法
    public function students()
    {
        return $this->hasMany('Student');
    }
}

Apabila mentakrifkan perkaitan, kami menggunakan kaedah hasMany, yang mengembalikan contoh objek HasMany untuk mewakili semasa Kelas model "mempunyai berbilang" mata kepada perhubungan perkaitan satu-ke-banyak dengan kelas model Pelajar.

Kemudian kami mentakrifkan kaedah perkaitan terbalik dalam kelas model Pelajar:

namespace appmodel;

use thinkModel;

class Student extends Model
{
    // 定义反向关联方法
    public function course()
    {
        return $this->belongsTo('Course');
    }
}

Dalam kelas model Pelajar, kami juga menggunakan kaedah belongsTo, yang akan mengembalikan contoh objek hasOne untuk mewakili semasa Hubungan satu-ke-banyak di mana kelas model "kepunyaan" dalam kelas model Kursus.

Kini kita boleh melakukan pertanyaan korelasi satu-ke-banyak melalui kaedah berikut:

// 查询课程信息,包括其选修学生信息
$course = Course::with(['students'])->find(1);

// 查询课程信息,只包括其选修学生姓名和年龄信息
$course = Course::with(['students' => function($query){
    $query->field('name, age');
}])->find(1);

Dalam contoh di atas, kami menentukan model korelasi melalui kaedah dengan dan menanyakan maklumat kursus menggunakan mencari kaedah. Hasil pertanyaan berkaitan akan dikembalikan dalam bentuk tatasusunan dan penapisan medan boleh dilakukan mengikut keperluan.

Operasi persatuan banyak-ke-banyak

Operasi persatuan banyak-ke-banyak merujuk kepada operasi di mana terdapat hubungan banyak-ke-banyak antara dua jadual. Sebagai contoh, kami mempunyai jadual kursus (kursus) dan jadual guru (guru) Setiap kursus boleh diajar oleh berbilang guru, dan setiap guru juga boleh mengajar berbilang kursus. Terdapat hubungan banyak-ke-banyak antara jadual kursus dan meja guru.

Mula-mula, tentukan perkaitan banyak-ke-banyak dalam kelas model Kursus:

namespace appmodel;

use thinkModel;

class Course extends Model
{
    // 定义多对多关联方法
    public function teachers()
    {
        return $this->belongsToMany('Teacher', 'course_teacher');
    }
}

Apabila mentakrifkan perkaitan, kami menggunakan kaedah belongsToMany, yang mengembalikan contoh objek BelongsToMany, yang mewakili semasa Kelas model "kepunyaan ramai" menunjuk kepada perhubungan persatuan ramai-ke-banyak kelas model Guru. Kita juga perlu lulus dalam parameter kedua 'course_teacher', yang mewakili nama jadual jadual perantaraan.

Kemudian kami mentakrifkan kaedah perkaitan terbalik dalam kelas model Teacher:

namespace appmodel;

use thinkModel;

class Teacher extends Model
{
    // 定义反向关联方法
    public function courses()
    {
        return $this->belongsToMany('Course', 'course_teacher');
    }
}

Dalam kelas model Teacher, kami juga menggunakan kaedah belongsToMany, yang akan mengembalikan contoh objek BelongsToMany, yang mewakili semasa Kelas model "mengandungi banyak" menunjukkan hubungan banyak-ke-banyak dengan kelas model Kursus. Anda juga perlu lulus dalam parameter kedua 'course_teacher', yang mewakili nama jadual jadual perantaraan.

Kini kami boleh melakukan pertanyaan korelasi banyak-ke-banyak melalui kaedah berikut:

// 查询课程信息,包括其授课老师信息
$course = Course::with(['teachers'])->find(1);

// 查询课程信息,只包括其授课老师姓名和职称信息
$course = Course::with(['teachers' => function($query){
    $query->field('name, title');
}])->find(1);

Dalam contoh di atas, kami menentukan model korelasi melalui kaedah dengan dan maklumat kursus pertanyaan menggunakan find kaedah. Hasil pertanyaan berkaitan akan dikembalikan dalam bentuk tatasusunan dan penapisan medan boleh dilakukan mengikut keperluan.

Setakat ini, kami telah mempelajari cara melaksanakan operasi persatuan model ORM dalam ThinkPHP6, termasuk operasi persatuan satu-dengan-satu, satu-ke-banyak dan banyak-ke-banyak. Operasi persatuan model ORM hanya boleh melengkapkan pertanyaan perkaitan antara jadual pangkalan data, meningkatkan kecekapan pembangunan dan memastikan ketepatan operasi pangkalan data.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan operasi persatuan model ORM 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