Maison >cadre php >PensezPHP >Comment effectuer des opérations d'association de modèles ORM dans ThinkPHP6 ?

Comment effectuer des opérations d'association de modèles ORM dans ThinkPHP6 ?

王林
王林original
2023-06-12 09:45:231283parcourir

ThinkPHP6 est un framework de développement PHP très populaire qui fournit de nombreuses méthodes d'opération ORM (Object Relational Mapping) pratiques pour simplifier les opérations de base de données, et a ajouté des méthodes d'association de modèles ORM plus riches dans la dernière version, permettant aux développeurs d'effectuer des requêtes associées plus facilement. opérations entre les tables de la base de données.

Cet article expliquera comment effectuer des opérations d'association de modèle ORM dans ThinkPHP6, y compris les opérations d'association un-à-un, un-à-plusieurs et plusieurs-à-plusieurs. Il expliquera également le mécanisme de mise en œuvre spécifique des opérations d'association.

Opération d'association un-à-un

L'opération d'association un-à-un fait référence à une opération où il n'y a qu'une correspondance un-à-un entre deux tables. Par exemple, nous avons une table utilisateur (users) et une table de détails utilisateur (user_details). Chaque utilisateur correspond à un enregistrement de détails utilisateur. Il existe une relation un-à-un entre la table utilisateur et la table de détails utilisateur.

Tout d'abord, définissez une association un-à-un dans la classe modèle :

namespace appmodel;

use thinkModel;

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

Lors de la définition de l'association, nous utilisons la méthode hasOne, qui renvoie une instance d'objet BelongsTo, indiquant que la classe modèle actuelle "en possède une" pointant vers le modèle UserDetail Relation un-à-un entre les classes.

Ensuite, nous définissons la méthode d'association inverse dans la classe modèle UserDetail :

namespace appmodel;

use thinkModel;

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

Dans la classe modèle UserDetail, nous utilisons également la méthode AppartientTo, qui renverra une instance d'objet hasOne, indiquant que la classe modèle actuelle "appartient" au Modèle utilisateur Relation un-à-un entre les classes.

Nous pouvons désormais effectuer une requête de corrélation individuelle via la méthode suivante :

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

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

Dans l'exemple ci-dessus, nous utilisons la méthode with pour spécifier le modèle de corrélation et la méthode find pour interroger les informations utilisateur. Les résultats de la requête associée seront renvoyés sous la forme d'un tableau et le filtrage des champs peut être effectué selon les besoins.

Opération d'association un-à-plusieurs

L'opération d'association un-à-plusieurs signifie que les enregistrements d'une table peuvent correspondre à plusieurs enregistrements d'une autre table. Par exemple, nous avons un horaire de cours (cours) et une table d'étudiants (étudiants). Chaque cours peut avoir plusieurs étudiants qui suivent des cours au choix. Il existe une relation un-à-plusieurs entre l'horaire de cours et la table des étudiants.

Tout d'abord, définissez une association un-à-plusieurs dans la classe modèle Course :

namespace appmodel;

use thinkModel;

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

Lors de la définition de l'association, nous utilisons la méthode hasMany, qui renvoie une instance d'objet HasMany, indiquant que la classe modèle actuelle "a plusieurs" points à Relation d'association un-à-plusieurs de la classe modèle Student.

Ensuite, nous définissons la méthode d'association inverse dans la classe modèle Student :

namespace appmodel;

use thinkModel;

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

Dans la classe modèle Student, nous utilisons également la méthode AppartientTo, qui renverra une instance d'objet hasOne, indiquant que la classe modèle actuelle "appartient" au Modèle de cours Relation un à plusieurs entre les classes.

Nous pouvons désormais effectuer une requête de corrélation un-à-plusieurs via la méthode suivante :

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

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

Dans l'exemple ci-dessus, nous spécifions le modèle de corrélation via la méthode with et interrogeons les informations sur le cours à l'aide de la méthode find. Les résultats de la requête associée seront renvoyés sous la forme d'un tableau et le filtrage des champs peut être effectué selon les besoins.

Opération d'association plusieurs-à-plusieurs

L'opération d'association plusieurs-à-plusieurs fait référence à l'opération où il existe une relation plusieurs-à-plusieurs entre deux tables. Par exemple, nous avons un horaire de cours (cours) et une table d'enseignants (enseignants). Chaque cours peut être enseigné par plusieurs enseignants, et chaque enseignant peut également enseigner plusieurs cours. Il existe une relation plusieurs-à-plusieurs entre l'horaire des cours. et la table des professeurs.

Tout d'abord, définissez la relation d'association plusieurs-à-plusieurs dans la classe modèle Course :

namespace appmodel;

use thinkModel;

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

Lors de la définition de la relation d'association, nous utilisons la méthode AppartientToMany, qui renverra une instance d'objet BelongsToMany, indiquant que la classe modèle actuelle "appartient à plusieurs" pointe vers la relation plusieurs-à-plusieurs de la classe modèle Enseignant. Nous devons également transmettre le deuxième paramètre « course_teacher », qui représente le nom de la table intermédiaire.

Ensuite, nous définissons la méthode d'association inverse dans la classe modèle Teacher :

namespace appmodel;

use thinkModel;

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

Dans la classe modèle Teacher, nous utilisons également la méthode AppartientToMany, qui renverra une instance d'objet BelongsToMany, indiquant que la classe modèle actuelle "contient plusieurs" points Relation plusieurs-à-plusieurs de la classe modèle de cours. Vous devez également transmettre le deuxième paramètre « course_teacher », qui représente le nom de la table intermédiaire.

Nous pouvons désormais effectuer des requêtes de corrélation plusieurs-à-plusieurs via la méthode suivante :

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

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

Dans l'exemple ci-dessus, nous spécifions le modèle de corrélation via la méthode with et recherchons les informations sur le cours à l'aide de la méthode find. Les résultats de la requête associée seront renvoyés sous la forme d'un tableau et le filtrage des champs peut être effectué selon les besoins.

Jusqu'à présent, nous avons appris comment effectuer des opérations d'association de modèles ORM dans ThinkPHP6, y compris des opérations d'association un-à-un, un-à-plusieurs et plusieurs-à-plusieurs. Les opérations d'association de modèles ORM peuvent simplement compléter des requêtes d'association entre les tables de base de données, améliorant considérablement l'efficacité du développement et garantissant l'exactitude des opérations de base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn