ORM を使用して ThinkPHP6 で複数テーブル関連のクエリを実行する方法

WBOY
リリース: 2023-06-20 09:18:12
オリジナル
4024 人が閲覧しました

ソフトウェア開発テクノロジーの継続的な発展に伴い、多くの開発者はコードの効率性と実用性だけでなく、コードの可読性と保守性も追求しています。 ORM (オブジェクト リレーショナル マッピング) は明らかにこの需要を満たすことができます。 ORM を使用すると、データベース内のリレーショナル データをオブジェクト間の関係にマッピングできるため、プログラマが必要とするデータベース対話コードの量が削減されます。 ThinkPHP6 フレームワークは ORM テクノロジーを使用して、開発者がリレーショナル データベースを簡単に操作できるようにします。この記事では、ORM を使用して ThinkPHP6 で複数テーブル関連のクエリを実行する方法を紹介します。

1. 単一テーブル クエリに ORM を使用する

複数テーブル関連のクエリに ORM を使用する前に、まず単一テーブル クエリに ORM を使用する方法をマスターする必要があります。

ThinkPHP6 でレコード操作をクエリするために ORM を使用すると非常に便利です。コントローラーで対応するモデルをインスタンス化し、モデル内のメソッドを呼び出すだけです。たとえば、student テーブルのデータをクエリする必要があります。

まず、アプリケーション ディレクトリに Student という名前のモデル ファイルを作成します。このファイルでは、hinkModel クラスを継承して Student テーブルの属性を定義します。

<?php

namespace appmodel;

use thinkModel;

class Student extends Model
{

}
ログイン後にコピー

次に、コントローラーで Student モデルをインスタンス化し、モデル内の既存のクエリ メソッドを呼び出して、単一のテーブル クエリを完了します。

<?php

namespace appcontroller;

use appmodelStudent;

class StudentController
{
    public function index()
    {
        $student = new Student();
        $list = $student->select();
        dump($list);
    }
}
ログイン後にコピー

コントローラーでインデックス メソッドを実行すると、ページ上の Student テーブルのすべてのレコード情報が表示され、非常に便利です。

2. ORM を使用して単純な複数テーブル相関クエリを実行する

ThinkPHP6 では、データベース相関クエリを実行するために SQL 結合テーブル クエリ ステートメントを手動で作成する必要はありません。 ORM はモデル間の関係を自動的に解析し、対応する SQL クエリ ステートメントを自動的に生成します。開発者は SQL ステートメントの詳細な構文を理解する必要はなく、モデル内でリレーションシップを定義し、コントローラーでクエリ メソッドを呼び出して複数テーブルの結合クエリを完了するだけで済みます。

1. 1 対 1 相関クエリ

2 つのデータベース テーブル間に 1 対 1 の関係がある場合、1 対 1 相関クエリを使用できます。たとえば、学生テーブルでは、学生は 1 つのクラスにのみ対応できるため、2 つのテーブルの間には 1 対 1 の関係があります。 ORM を使用して、学生テーブル内の情報をクエリし、学生が所属しているクラス情報をクエリできます。

まず、Student モデルの 2 つのテーブル間の 1 対 1 の関係を定義します。

<?php

namespace appmodel;

use thinkModel;

class Student extends Model
{
    public function grade()
    {
        return $this->hasOne('Grade', 'id', 'grade_id');
    }
}
ログイン後にコピー

関連付けメソッドでは、最初のパラメータ「Grade」は関連付けられるテーブルを表し、2 番目のパラメータ「id」は Grade テーブルの関連フィールドを表し、3 番目のパラメータ「grade_id」は関連フィールドを表します。学生テーブルにあります。

次に、コントローラーのモデルで with メソッドを呼び出して、student テーブル内のすべての情報とそのクラス情報をクエリします。

<?php

namespace appcontroller;

use appmodelStudent;

class StudentController
{
    public function index()
    {
        $list = Student::with('grade')->select();
        dump($list);
    }
}
ログイン後にコピー

ORM を使用すると、student テーブル内のすべての情報と、それが配置されているクラスに関する関連情報を簡単にクエリできます。このメソッドは 1 対 1 の関連クエリです。

2. 1 対多の相関クエリ

2 つのデータベース テーブル間に 1 対多の関係がある場合、1 対多の相関クエリを使用できます。たとえば、学生テーブルでは、クラスに複数の学生が含まれることがあり、1 対多の関係が存在します。 ORM を使用すると、クラス情報をクエリしたり、クラス内のすべての生徒情報をクエリしたりできます。

最初に、Grade モデルの 2 つのテーブル間の 1 対多の関係を定義します。

<?php

namespace appmodel;

use thinkModel;

class Grade extends Model
{
    public function student() 
    {
        return $this->hasMany('Student', 'grade_id', 'id');
    }
}
ログイン後にコピー

関連付けメソッドでは、最初のパラメータ「Student」は関連付けられるテーブルを表し、2 番目のパラメータ「grade_id」は Student テーブルの関連フィールドを表し、3 番目のパラメータ「id」は関連フィールドを表します。グレードテーブルにあります。

次に、コントローラーのモデルで with メソッドを呼び出して、クラス内のすべての生徒の情報をクエリします。

<?php

namespace appcontroller;

use appmodelGrade;

class GradeController
{
    public function index()
    {
        $list = Grade::with('student')->select();
        dump($list);
    }
}
ログイン後にコピー

このメソッドは 1 対多の関連クエリです。

3. ORM を使用して複数の 1 対多の関連付けクエリを実行する

開発中に複数の 1 対多の関連付けテーブルをクエリする必要がある場合は、次のネストされた関連付けメソッドを使用できます。モデル。たとえば、複数のクラスがあり、各クラスに複数の生徒がいる学校に関する情報をクエリする必要がある場合は、ネストされた関連付けメソッドを使用する必要があります。

まず、Teacher モデルで 1 対多の関係を定義します。

<?php

namespace appmodel;

use thinkModel;

class Teacher extends Model
{
    public function grade() 
    {
        return $this->hasMany('Grade', 'teacher_id', 'id');
    }
}
ログイン後にコピー

次に、グレード モデルで 1 対多の関連付けを定義します。

<?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');
    }
}
ログイン後にコピー

関連付けメソッドでは、belongsTo は、現在のモデルの外部キーがモデルの関連テーブルの主キーに関連付けられていることを示します。つまり、Teacher テーブルの主キーは、次の Teacher_id フィールドに対応します。グレードテーブル。

最後に、コントローラーのモデルで with メソッドを呼び出して、複数の 1 対多の関連クエリを完了します。

<?php

namespace appcontroller;

use appmodelTeacher;

class TeacherController
{
    public function index()
    {
        $list = Teacher::with([
            'grade' => function($query) {
                $query->with('student');
            }
        ])->select();
        dump($list);
    }
}
ログイン後にコピー

上記の一連の操作を通じて、複数の 1 対多の関連クエリを完了できます。

概要

ORM テクノロジーの出現により、プログラム開発の難易度はある程度軽減され、ThinkPHP6 フレームワークの ORM により、開発者はデータベース操作をより柔軟かつ便利に行うことができます。 ORM の操作方法を理解して習得すると、データ クエリの効率と精度が向上し、その後の開発に大きな利便性がもたらされます。

以上がORM を使用して ThinkPHP6 で複数テーブル関連のクエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート