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

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

PHPz
PHPzオリジナル
2023-04-21 10:12:221289ブラウズ

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 までご連絡ください。