ホームページ PHPフレームワーク ThinkPHP thinkphpのormとは何ですか

thinkphpのormとは何ですか

Feb 14, 2022 pm 05:04 PM
orm thinkphp

thinkphp では、ORM は「オブジェクト リレーショナル マッピング」を指します。これは、開発者がデータベース開発を使用しやすくするためのストレージ アクセス層です。ORM の主な目的は、オブジェクト モデルで表されるオブジェクトを SQL ベースにマッピングすることです。リレーショナル モデルのデータベース構造。

thinkphpのormとは何ですか

このチュートリアルの動作環境: Windows 7 システム、thinkphp v5.1 バージョン、Dell G3 コンピューター。

#thinkphp の orm

ORM の正式名は、オブジェクト リレーショナル マッピング、つまりオブジェクト リレーショナル マッピングです

  • O (Object) オブジェクトはプロジェクトの実体であり、より正確にはデータモデルであり、永続化クラスとも言えます。

  • R (関係) リレーショナル データ

  • M (マッピング) マッピング、オブジェクトをリレーショナル データにマッピング、リレーショナル データをオブジェクトにマッピングするプロセス。

より直観的に理解すると、ORM は OOP 思考を使用して SQL ステートメントの追加、削除、変更、クエリを生成するということです。

ThinkPHP の ORM は、開発者がデータベース開発を使用するためのストレージ アクセス層です。フレームワークの設計図は次のとおりです:

thinkphpのormとは何ですか

主な目的は次のとおりです。オブジェクト モデル 表現されたオブジェクトは、SQL ベースのリレーショナル モデルのデータベース構造にマッピングされます。

オブジェクト自体のプロパティを変更する場合、またはオブジェクトのメソッドを呼び出す場合、対応する特定の SQL ステートメントが実行されます。

このようにして、コードを書く人は、SQL ステートメントの追加、削除、変更、クエリを繰り返し書くのではなく、ビジネス ロジックをより適切に書くことができます。

#thinkphp のアプリケーション例TP フレームワークにはデータベース操作用の 2 つのモジュールがあります:

    Database
  • Model
tp のデータベース モジュール

ドキュメントの特徴を引用する説明

Connection/Query/Builder(SQLジェネレーター)に分割

    Connectionコネクタmain データベースへの接続に使用されます。異なる種類のデータベースに接続するには、異なるドライバを使用します。
  • Query クエリは、SQL ステートメントを実行し、結果を処理し、それらをデータ セットにマップするために使用されます。
  • Builder ジェネレーターは、渡した条件、並べ替えなどを SQL ステートメントに変換するために使用されます。
  • これらの 3 つのステップで、ORM アイデアの抽象マッピングが使用されている場合、それは Query クエリ モジュールのみであることがわかりますが、TP ドキュメントの説明を注意深く確認できます。データセットの。

これは、次のようなデータ処理メソッドをカプセル化して提供することに関するものです。

(以下はドキュメントからの一部をコピーしたものです)

toArray     将数据集的数据转为数组
merge   合并其它数据
diff    比较数组,返回差集
flip    交换数据中的键和值
intersect   比较数组,返回交集
keys    返回数据中的所有键名
pop 删除数据中的最后一个元素
shift   删除数据中的第一个元素
unshift 在数据开头插入一个元素
reduce  通过使用用户自定义函数,以字符串返回数组
ログイン後にコピー

ただし、提供されていません。データ セットを操作する場合などの逆マッピング リレーショナル操作により、データベース内のデータが自動的に更新されます。

つまり、私の理解では、データベース モジュールには ORM のアイデアはそれほど多くありません。焦点は依然としてモデルの理解と適用にあります。

tp のモデル

モデル ファイルを定義する

namespace app\index\model;

use think\Model;

// 设置类名 需要遵循转换规则,蛇形转为大驼峰
class User extends Model
{
    // 设置主键字段名
    protected $pk = 'u_id';

    // 开启自动维护时间戳字段 (什么时间插入 什么时间更新)
    protected $autoWriteTimestamp = true;

    // 软删除 开启之后 删除数据只是用一个字段来标识为删除状态 方便查询、备份等
    use SoftDelete;
    protected $deleteTime = 'delete_time';

}
ログイン後にコピー

上記のコードには、ドキュメントの最初の章にあるモデルの初期化よりも多くの内容が含まれています。これは、モデルが多くの機能を完了できることを強調するためです。

Thisこれは、ORM の出現の理由でもあります。ORM は、SQL の実行をオブジェクト指向プログラミングのオブジェクトに抽象的にマップします。

これは次のように理解できます: テーブル内のデータ行は、コード内の新しいオブジェクトを表します。オブジェクトが変更されると、テーブル内の対応する行が自動的に更新されます。

モデルの使用

デモされたコードは比較的単純ですが、実際には非常に柔軟です

たとえば、クエリでは非クエリする主キー条件、複数行レコードのクエリなど。

<?php
// *******快速查询、更新*******
// 查询主键=1的数据
$user = User::get(1);
// 然后更改它的name字段为新的值
$user->name = &#39;thinkphp&#39;;
// 保存,自己去数据库给我更新吧~
$user->save();

// *******插入新的一行数据*******
// 新建一个对象(相对应的操作就是新创建一行)
$user = new User;
// 设置字段的值  有多个字段就多个设置
$user->name= &#39;thinkphp&#39;;
// 保存,自己去插入吧~
$user->save();
ログイン後にコピー

誤解

使い方を見た後、多くの初心者はコードを書き始めますが、間違った方法を使用します。

① モデルは DB クラスにのみ使用する必要があります。

モデルは db クラスのスーパーセットとみなすことができますが、単に DB クラスとして使用するのではなく、単純な DB クラスとして使用する場合には、 ORM のアイデアを使用してそれを作成します。それなら使う必要はありません。 。

使い方を誤ると効率が上がらないだけでなく、自分自身にも影響を及ぼします。 (例: コードの仕様が統一されていない、対応するモデル ファイルを使用して新しいテーブルを追加する必要がある、など)

コードのデモ:

<?php
$userModel = new User(); // 这里就相当于初始化Db类
$userOneInfo = $userModel->where([&#39;u_id&#39; => 1])->find();

$userTwoInfo = $userModel->where([&#39;u_id&#39; => 2])->find();
// ... 执行其他逻辑 比如判断上下级 操作权限等等

// 业务需求不只是读取用户的数据这么简单
// 还要扣除余额(就是更新数据库)
$userOneRes = $userModel->where([&#39;u_id&#39; => 1])->update([&#39;u_balance&#39; => &#39;xxxx&#39;]);

// ... 执行其他逻辑
ログイン後にコピー

これを見たときは、立ち止まって考えてください。 。 。あなたのコードがこのようになったことはありますか?

今でもこのように使っている人がいると思います。昔はこんな使い方をしていたので。

それでは、正しい使い方を見てみましょう (私の意見では、これが間違っている、またはもっと良い方法があると思う場合は、コメントして交換してください)

<?php

$userOneInfo = User::get(1);

// 这里演示使用非主键条件查询的情况!!
// 查询一个1用户的下级出来
$userTwoInfo = User::get(function($query){
    $query->where([&#39;p_uid&#39; => 1]);
});

// ... 执行其他逻辑 比如判断上下级 操作权限等等

// 业务需求不只是读取用户的数据这么简单
// 还要扣除余额(就是更新数据库)
$userOneInfo->u_balance = 0;
$userOneRes = $userOneInfo->save();

$userTwoInfo->u_balance = 0;
$userTwoRes =  $userTwoInfo->save();

// ... 执行其他逻辑
ログイン後にコピー

オブジェクト マップがあるため同じ where 条件のデータについては、オブジェクトを直接操作するだけです。 u_id =1 が更新される場所、

使用モデルを削除するために u_id = 1 を繰り返し記述する必要はありません。多くの用途があります (オープンソース チームの献身的なおかげで、多数のコードがカプセル化されています)。私たちのための関数)

例:

– 新しいデータがユーザー テーブルに追加されると、別の補助テーブルもユーザー ID を使用して行を初期化する必要があります。

– データ形式を自動的に変換します (タイムスタンプを保存すると、クエリは 2019-7-13 19:53:04 形式になります)。

– データを自動的に検証し、データを自動的に完了します (オペレーターの IP 権限などは、運用中にデフォルトで保存されます)。

– 関連クエリ (TP の非常に強力な機能です。別のモデルとの関係はモデル内で定義されます。たとえば、ストア テーブルの u_id を使用して、所属するユーザーの情報をクエリすることができます)店舗モデルとユーザーモデルの関連付けに相当します データマージを自動的に結合して返送)

– etc.

概要

#ORM は、オブジェクト リレーショナル マッピング (データベース オブジェクト マッピング) を表すアイデアと概念です。ORM は、データに対する操作をオブジェクトに対する操作に抽象化します。考え方を変え、フレームワークが提供する機能を上手に活用し、より良いコードを書く方法を学びましょう。 TP のモデルは非常に強力で、多くのロジックがカプセル化されています。

[関連チュートリアルの推奨事項:

thinkphp フレームワーク]

以上がthinkphpのormとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

thinkphpプロジェクトの実行方法 thinkphpプロジェクトの実行方法 Apr 09, 2024 pm 05:33 PM

ThinkPHP プロジェクトを実行するには、Composer をインストールし、Composer を使用してプロジェクトを作成し、プロジェクト ディレクトリに入り、php bin/consoleserve を実行し、http://localhost:8000 にアクセスしてようこそページを表示する必要があります。

thinkphp にはいくつかのバージョンがあります thinkphp にはいくつかのバージョンがあります Apr 09, 2024 pm 06:09 PM

ThinkPHP には、さまざまな PHP バージョン向けに設計された複数のバージョンがあります。メジャー バージョンには 3.2、5.0、5.1、および 6.0 が含まれますが、マイナー バージョンはバグを修正し、新機能を提供するために使用されます。最新の安定バージョンは ThinkPHP 6.0.16 です。バージョンを選択するときは、PHP バージョン、機能要件、コミュニティ サポートを考慮してください。最高のパフォーマンスとサポートを得るには、最新の安定バージョンを使用することをお勧めします。

thinkphpの実行方法 thinkphpの実行方法 Apr 09, 2024 pm 05:39 PM

ThinkPHP フレームワークをローカルで実行する手順: ThinkPHP フレームワークをローカル ディレクトリにダウンロードして解凍します。 ThinkPHP ルート ディレクトリを指す仮想ホスト (オプション) を作成します。データベース接続パラメータを構成します。 Webサーバーを起動します。 ThinkPHP アプリケーションを初期化します。 ThinkPHP アプリケーションの URL にアクセスして実行します。

PHP でオブジェクト リレーショナル マッピング (ORM) を使用してデータベース操作を簡素化するにはどうすればよいですか? PHP でオブジェクト リレーショナル マッピング (ORM) を使用してデータベース操作を簡素化するにはどうすればよいですか? May 07, 2024 am 08:39 AM

PHP でのデータベース操作は、オブジェクトをリレーショナル データベースにマップする ORM を使用して簡素化されます。 Laravel の EloquentORM を使用すると、オブジェクト指向構文を使用してデータベースと対話できます。モデル クラスを定義したり、Eloquent メソッドを使用したり、実際にブログ システムを構築したりすることで ORM を使用できます。

laravelとthinkphpではどちらが優れていますか? laravelとthinkphpではどちらが優れていますか? Apr 09, 2024 pm 03:18 PM

Laravel フレームワークと ThinkPHP フレームワークのパフォーマンスの比較: ThinkPHP は、最適化とキャッシュに重点を置いて、一般に Laravel よりもパフォーマンスが優れています。 Laravel は優れたパフォーマンスを発揮しますが、複雑なアプリケーションの場合は、ThinkPHP の方が適している可能性があります。

thinkphpのインストール方法 thinkphpのインストール方法 Apr 09, 2024 pm 05:42 PM

ThinkPHP のインストール手順: PHP、Composer、および MySQL 環境を準備します。 Composer を使用してプロジェクトを作成します。 ThinkPHP フレームワークと依存関係をインストールします。データベース接続を構成します。アプリケーションコードを生成します。アプリケーションを起動し、http://localhost:8000 にアクセスします。

Hibernate はポリモーフィック マッピングをどのように実装しますか? Hibernate はポリモーフィック マッピングをどのように実装しますか? Apr 17, 2024 pm 12:09 PM

Hibernate ポリモーフィック マッピングは、継承されたクラスをデータベースにマップでき、次のマッピング タイプを提供します。 join-subclass: 親クラスのすべての列を含む、サブクラス用の別個のテーブルを作成します。 table-per-class: サブクラス固有の列のみを含む、サブクラス用の別個のテーブルを作成します。 Union-subclass: join-subclass と似ていますが、親クラス テーブルがすべてのサブクラス列を結合します。

thinkphpのパフォーマンスはどうですか? thinkphpのパフォーマンスはどうですか? Apr 09, 2024 pm 05:24 PM

ThinkPHP は、キャッシュ メカニズム、コードの最適化、並列処理、データベースの最適化などの利点を備えた高性能 PHP フレームワークです。公式パフォーマンステストでは、1秒あたり10,000以上のリクエストを処理できることが示されており、実際のアプリケーションではJD.comやCtripなどの大規模なWebサイトやエンタープライズシステムで広く使用されています。

See all articles