Maison  >  Article  >  cadre php  >  Comment utiliser ORM pour effectuer des requêtes liées à plusieurs tables dans ThinkPHP6

Comment utiliser ORM pour effectuer des requêtes liées à plusieurs tables dans ThinkPHP6

WBOY
WBOYoriginal
2023-06-20 09:18:123966parcourir

Avec le développement continu de la technologie de développement logiciel, de nombreux développeurs recherchent non seulement l'efficacité et la praticité du code, mais également la lisibilité et la maintenabilité du code. L’ORM (Object-Relational Mapping) peut évidemment répondre à cette demande. ORM peut nous aider à mapper les données relationnelles de la base de données aux relations entre les objets, réduisant ainsi la quantité de code d'interaction de base de données requise par les programmeurs. Le framework ThinkPHP6 utilise la technologie ORM pour permettre aux développeurs d'exploiter facilement des bases de données relationnelles. Cet article explique comment utiliser ORM pour effectuer des requêtes liées à plusieurs tables dans ThinkPHP6.

1. Utilisez ORM pour une requête à table unique

Avant d'utiliser ORM pour une requête liée à plusieurs tables, nous devons d'abord maîtriser comment utiliser ORM pour une requête à table unique.

Il est très pratique d'utiliser ORM pour interroger des enregistrements dans ThinkPHP6. Instanciez simplement le modèle correspondant dans le contrôleur, puis appelez les méthodes dans le modèle. Par exemple, nous devons interroger les données d’une table étudiante.

Tout d'abord, créez un fichier modèle nommé Student dans le répertoire de l'application. Dans ce fichier, définissez les attributs de la table student en héritant de la classe hinkModel.

<?php

namespace appmodel;

use thinkModel;

class Student extends Model
{

}

Ensuite, instanciez le modèle Student dans le contrôleur et appelez la méthode de requête existante dans le modèle pour terminer la requête de table unique.

<?php

namespace appcontroller;

use appmodelStudent;

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

Après avoir exécuté la méthode d'index dans le contrôleur, nous pouvons voir toutes les informations d'enregistrement dans la table des étudiants sur la page, ce qui est très pratique.

2. Utilisez ORM pour les requêtes simples liées à plusieurs tables

Dans ThinkPHP6, vous n'avez pas besoin d'écrire manuellement des instructions de requête de table commune SQL pour effectuer des requêtes liées à la base de données. ORM analysera automatiquement les relations entre les modèles, puis générera automatiquement les instructions de requête SQL correspondantes. Les développeurs n'ont pas besoin de comprendre la syntaxe détaillée des instructions SQL. Il leur suffit de définir la relation dans le modèle, puis d'appeler la méthode de requête dans le contrôleur pour terminer la requête conjointe de plusieurs tables.

1. Requête de corrélation un-à-un

Lorsqu'il existe une relation un-à-un entre deux tables de base de données, nous pouvons utiliser une requête de corrélation un-à-un . Par exemple, dans la table des étudiants, un élève ne peut correspondre qu'à une seule classe, il existe donc une relation biunivoque entre les deux tables. Nous pouvons utiliser ORM pour interroger les informations de la table des étudiants et interroger les informations de classe dans lesquelles il se trouve.

Tout d'abord, définissez la relation un-à-un entre les deux tables dans le modèle Student.

<?php

namespace appmodel;

use thinkModel;

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

Dans la méthode d'association, le premier paramètre 'Grade' représente la table à associer, le deuxième paramètre 'id' représente le champ associé dans la table Grade, et le troisième paramètre 'grade_id' représente les champs associés dans la table Etudiant.

Appelez ensuite la méthode with dans le modèle du contrôleur pour interroger toutes les informations de la table des étudiants et ses informations de classe.

<?php

namespace appcontroller;

use appmodelStudent;

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

En utilisant ORM, nous pouvons facilement interroger toutes les informations de la table des étudiants et les informations associées sur la classe où elle se trouve. Cette méthode est une requête associée un à un.

2. Requête de corrélation un-à-plusieurs

Lorsqu'il existe une relation un-à-plusieurs entre deux tables de base de données, nous pouvons utiliser une requête de corrélation un-à-plusieurs . Par exemple, dans la table des étudiants, une classe peut avoir plusieurs étudiants et il existe une relation un-à-plusieurs. Nous pouvons utiliser ORM pour interroger les informations sur la classe et interroger toutes les informations sur les étudiants de la classe.

Tout d'abord, définissez la relation un-à-plusieurs entre les deux tables dans le modèle Grade.

<?php

namespace appmodel;

use thinkModel;

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

Dans la méthode d'association, le premier paramètre 'Student' représente la table à associer, le deuxième paramètre 'grade_id' représente le champ associé dans la table Student, et le troisième paramètre 'id' représente les champs associés dans le tableau Note.

Appelez ensuite la méthode with dans le modèle du contrôleur pour interroger les informations de tous les élèves de la classe.

<?php

namespace appcontroller;

use appmodelGrade;

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

Cette méthode est une requête associée un-à-plusieurs.

3. Utilisez ORM pour effectuer plusieurs requêtes liées un à plusieurs

Lorsque nous devons interroger plusieurs tables liées un à plusieurs pendant le développement, nous pouvons utiliser le intégration du modèle Ensemble de méthodes associées. Par exemple, si nous devons maintenant interroger des informations sur une école qui compte plusieurs classes et que chaque classe compte plusieurs élèves, nous devons utiliser la méthode d’association imbriquée.

Tout d'abord, définissez une relation un-à-plusieurs dans le modèle Enseignant.

<?php

namespace appmodel;

use thinkModel;

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

Ensuite, définissez une association un-à-plusieurs dans le modèle Grade.

<?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');
    }
}

Dans la méthode d'association, appartientTo indique que la clé étrangère du modèle courant est associée à la clé primaire de la table associée au modèle, c'est-à-dire que la clé primaire de la table Teacher correspond au professeur_id champ dans le tableau Note.

Enfin, appelez la méthode with dans le modèle du contrôleur pour compléter plusieurs requêtes associées une à plusieurs.

<?php

namespace appcontroller;

use appmodelTeacher;

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

Grâce à la série d'opérations ci-dessus, nous pouvons effectuer plusieurs requêtes liées une à plusieurs.

Résumé

L'émergence de la technologie ORM a réduit dans une certaine mesure la difficulté de développement de programmes. L'ORM du framework ThinkPHP6 rend les développeurs plus flexibles et plus pratiques dans les opérations de base de données. Comprendre et maîtriser les méthodes de fonctionnement de l'ORM peut nous rendre plus efficaces et plus précis dans l'interrogation des données, ce qui apportera une grande commodité à notre développement ultérieur.

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