ホームページ PHPフレームワーク ThinkPHP ThinkPHP 5.0 でのモデルの使用方法について話しましょう

ThinkPHP 5.0 でのモデルの使用方法について話しましょう

Apr 21, 2023 am 10:12 AM

ThinkPHP 5.0 は、中国で最も広く使用されている PHP 開発フレームワークの 1 つであり、コア コードに多くの最適化と改善が加えられただけでなく、多くの新しい機能が追加されました。大幅に改善されました。大幅なアップグレードです。この記事では、ThinkPHP 5.0 でのモデルの使い方を詳しく紹介します。

1. モデルとは

モデルとは、データベースを操作するために使用されるデータ操作クラスです。 ThinkPHP では、モデルがデータ テーブルをカプセル化し、データ テーブルに対する便利で高速な操作を可能にします。モデルを作成するときは、大量のクエリや SQL ステートメントを記述するのではなく、Think\Model を継承するだけで済みます。

2. 単純なモデルを作成する

  1. まず ThinkPHP 5.0 でモデルを作成します

ThinkPHP 5.0 では、モデルの作成は非常に簡単です。アプリケーション ディレクトリに新しいモデル ディレクトリを作成し、そのモデル ディレクトリに User.php という名前の新しいファイルを作成する必要があります。コードは次のとおりです:

<?php

namespace app\model;

use think\Model;

class User extends Model
{
}
ログイン後にコピー
  1. データベースに接続

ThinkPHP 5.0 は、デフォルトで PDO を使用してデータベースに接続し、データベース接続情報はアプリケーション ディレクトリの database.php ファイルで構成されます。接続が成功したら、モデル内で対応する操作を実行できます。

  1. モデルの基本的な CRUD 操作

ThinkPHP 5.0 では、モデルの基本的な CRUD 操作がカプセル化されており、直接呼び出すことができます。 User モデルを例として、最も一般的な CRUD 操作を示します。

(1) データの挿入

$user = new User();

$user->name = 'Tom';
$user->age = 20;

$user->save();
ログイン後にコピー

上記は、データを挿入し、User オブジェクトをインスタンス化し、次に、属性メソッドを渡してオブジェクトに値を割り当て、最後に save() メソッドを呼び出してデータをデータベースに保存します。

(2) データの削除

User::destroy(1);
ログイン後にコピー

ここの1は削除するデータのIDで、複数のデータを削除したい場合は配列を渡すことができます。 where メソッドを使用して条件付き削除を行うこともできます。

(3) データのクエリ

// 查询所有数据
$users = User::all();

// 根据条件查询单条数据
$user = User::where('name', 'Tom')->find();

// 根据条件查询多条数据
$users = User::where('age', '>', 18)->select();
ログイン後にコピー

(4) データの更新

$user = User::get(1);

$user->name = 'Jack';

$user->save();
ログイン後にコピー

つまり、まず変更するデータをクエリし、次にそれをデータベースに保存します。データ中間を変更した後、save() メソッドを実行します。

3. モデルの相関演算

実際の開発では、複数のデータ テーブルに対して複雑な結合クエリや相関演算を実行する必要があることがよくあります。 ThinkPHP 5.0 モデルは、テーブル間の関連付けの問題を迅速に解決できる豊富な関連付け操作を提供します。

  1. 1 対 1 の関連付け

ThinkPHP 5.0 では、1 対 1 の関連付けには 3 つの方法があります。

(1) 関連付けモデル属性

class User extends Model
{
    public function profile()
    {
        return $this->hasOne('Profile');
    }
}

class Profile extends Model
{
    public function user()
    {
        return $this->belongsTo('User');
    }
}

$user = User::get(1);

$profile = $user->profile;
ログイン後にコピー

上記のコードでは、User モデルは hasOne() メソッドを通じて Profile モデルに関連付けられ、$user->profile 属性が呼び出されて、関連付けられたデータが取得されます。

(2) 関連クエリ

$user = User::with('profile')->select();

$profile = $user->profile;
ログイン後にコピー

上記のコードでは、関連クエリは with() メソッドを通じて直接実行され、$user->profile 属性が呼び出されて取得されます。関連データ。

(3) 統合クエリ

$user = User::field('name')
            ->join('profile', 'profile.user_id=user.id')
            ->select();

$profile = $user->profile;
ログイン後にコピー

上記のコードでは、User テーブルと Profile テーブルが join() メソッドで接続されており、Profile テーブルのフィールドを取得できます。フィールド式。

  1. 1 対多の関連付け

ThinkPHP 5.0 では、1 対多の関連付けにも 3 つの方法があります。

(1)関連付けられたモデルの属性

class User extends Model
{
    public function books()
    {
        return $this->hasMany('Book');
    }
}

class Book extends Model
{
    public function user()
    {
        return $this->belongsTo('User');
    }
}

$user = User::get(1);

$books = $user->books;
ログイン後にコピー

上記のコードでは、User モデルは hasMany() メソッドを通じて Book モデルに関連付けられ、$user->books 属性が呼び出されて、関連付けられたデータが取得されます。 。

(2) 関連クエリ

$user = User::with('books')->select();

$books = $user->books;
ログイン後にコピー

上記のコードでは、関連クエリは with() メソッドを通じて直接実行され、$user->books 属性が呼び出されて取得されます。関連データ。

(3) 統合クエリ

$user = User::field('name')
            ->join('book', 'book.user_id=user.id')
            ->select();

$books = $user->books;
ログイン後にコピー

上記のコードでは、join()メソッドでUserテーブルとBookテーブルを接続し、Bookテーブルのフィールドを取得しています。フィールド式で。

  1. 多対多の関連付け

ThinkPHP 5.0 では、多対多の関連付けにも 3 つのメソッドがあります。

(1) メイン モデルの関連付けモデル属性

class User extends Model
{
    public function roles()
    {
        return $this->belongsToMany('Role');
    }
}

class Role extends Model
{
    public function users()
    {
        return $this->belongsToMany('User');
    }
}

$user = User::get(1);

$roles = $user->roles;
ログイン後にコピー

上記のコードでは、User モデルは、belongsToMany() メソッドを通じてロール モデルに関連付けられ、$user->roles 属性が呼び出されて、関連付けられたデータが取得されます。

(2) 中間テーブルを個別にクエリする

$user = User::get(1);

$roles = $user->roles()
            ->where('status', '1')
            ->select();
ログイン後にコピー

上記のコードでは、$user->roles() メソッドを呼び出して中間テーブルを取得し、where() メソッドを使用します。条件付きクエリを実行するメソッド。

(3) 中間テーブル統合クエリ

$user = User::field('name,role.name as rolename')
            ->join('user_role','user_role.user_id=user.id')
            ->join('role', 'user_role.role_id=role.id')
            ->select();

$roles = $user->roles;
ログイン後にコピー

上記のコードでは、Userテーブル、UserRoleテーブル、Roleテーブルをjoin()メソッドで接続し、Roleを取得しています。フィールド式テーブルのフィールド。

4. モデル イベント

ThinkPHP 5.0 モデル イベントは、モデルのライフ サイクルにおいて多くの便利なフックを提供し、さまざまな時間や段階でデータを操作および処理できるようにします。データ検証、自動入力、データ更新。一般的に使用されるイベントは次のとおりです。

(1) クエリ前イベント

class User extends Model
{
    protected static function onBeforeFind($query)
    {
        // before find event
    }
}
ログイン後にコピー

上記のコードでは、クエリ前イベントは onBeforeFind() メソッドによって追加されます。

(2) 挿入前イベント

class User extends Model
{
    protected static function onBeforeInsert($data)
    {
        // before insert event
    }
}
ログイン後にコピー

上記のコードでは、onBeforeInsert() メソッドを通じて挿入前イベントを追加します。

(3) 更新前イベント

class User extends Model
{
    protected static function onBeforeUpdate($data)
    {
        // before update event
    }
}
ログイン後にコピー

上記のコードでは、更新前イベントは onBeforeUpdate() メソッドによって追加されます。

(4) 削除前のイベント

class User extends Model
{
    protected static function onBeforeDelete($data)
    {
        // before delete event
    }
}
ログイン後にコピー

上記のコードでは、onBeforeDelete()メソッドで削除前のイベントを追加しています。

5.概要

この記事の導入部を通じて、ThinkPHP 5.0 のモデルは非常に使いやすく、CRUD 操作と一般的に使用される関連クエリをサポートしていることがわかります。同時に、モデル イベントでは、データ検証、自動入力、データ更新などの機能を簡単に実装できます。深層学習モデルの使用により、開発効率が向上し、プロジェクト開発プロセスを加速できます。

以上がThinkPHP 5.0 でのモデルの使用方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Think BookとThinkPadの違いは何ですか Think BookとThinkPadの違いは何ですか Mar 06, 2025 pm 02:16 PM

Think BookとThinkPadの違いは何ですか

SQLインジェクションチュートリアルを防ぐ方法 SQLインジェクションチュートリアルを防ぐ方法 Mar 06, 2025 pm 02:10 PM

SQLインジェクションチュートリアルを防ぐ方法

ThinkPhpによって開発されたソフトウェアのインストール方法チュートリアルをインストールする方法 ThinkPhpによって開発されたソフトウェアのインストール方法チュートリアルをインストールする方法 Mar 06, 2025 pm 02:09 PM

ThinkPhpによって開発されたソフトウェアのインストール方法チュートリアルをインストールする方法

thinkphpの脆弱性を修正する方法thinkphpの脆弱性に対処する方法 thinkphpの脆弱性を修正する方法thinkphpの脆弱性に対処する方法 Mar 06, 2025 pm 02:04 PM

thinkphpの脆弱性を修正する方法thinkphpの脆弱性に対処する方法

ThinkPhpの脆弱性に対処する方法は? ThinkPhpの脆弱性に対処する方法は? Mar 06, 2025 pm 02:08 PM

ThinkPhpの脆弱性に対処する方法は?

ThinkPhpチュートリアルの使用方法 ThinkPhpチュートリアルの使用方法 Mar 06, 2025 pm 02:11 PM

ThinkPhpチュートリアルの使用方法

ThinkPhpによってデータベースに接続する方法の詳細な手順 ThinkPhpによってデータベースに接続する方法の詳細な手順 Mar 06, 2025 pm 02:06 PM

ThinkPhpによってデータベースに接続する方法の詳細な手順

Think PadとThinkbookの違いは何ですか Think PadとThinkbookの違いは何ですか Mar 06, 2025 pm 02:13 PM

Think PadとThinkbookの違いは何ですか

See all articles