ThinkPHP: JSON フィールド タイプ (ORM) の使用法
ThinkPHP 5.1 が正式にリリースされてしばらく経ちましたが、その新機能を順次紹介していきます。今日紹介したいのは、多くのユーザーがまだ理解していない機能である JSON フィールド データのサポートです。
ただし、まず最初に、この記事で説明する JSON フィールド データのサポートはバージョン V5.1.4 から導入されたものであることに注意してください。セキュリティ更新プログラムが含まれているため、必ずバージョン 5.1.9 を使用することをお勧めします。
この記事の JSON フィールドの定義には、保存されたデータが JSON 形式である場合の JSON タイプまたは文字タイプが含まれているため、理論上は、JSON フィールドの条件付きクエリを使用する場合を除き、データベースのタイプとバージョンに関する要件はありません。
Db クラスは JSON を操作します
モデル クラスを使用しない場合、Db クラスは、JSON を指定するための json メソッドを提供します。データテーブルのJSON形式フィールド。たとえば、ユーザー テーブルには JSON タイプの情報フィールドがあり、次のメソッドを使用してデータを操作できます。
データ書き込み
$user['name'] = 'thinkphp'; $user['info'] = [ 'email' => 'thinkphp@qq.com', 'nickname' => '流年', ]; Db::name('user') ->json(['info']) ->insert($user);
jsonメソッドの引数は配列であり、例ではinfoフィールドを指定していますが、実際には複数のJSON型フィールドを指定することも可能です。
データ クエリ
JSON データ全体をクエリします。
$user = Db::name('user') ->json(['info']) ->find(1); dump($user);
返されるクエリ結果データには、配列タイプの情報データが自動的に含まれます。これは、JSON 形式のデータが json_decode によって自動的に処理されたことを意味します。
このクエリ方法では、情報フィールドに JSON タイプを使用する必要は厳密にはありません。
JSON データの値に基づいてクエリを実行する必要がある場合は、次のようにすることができます。次のメソッドを使用してください
$user = Db::name('user') ->json(['info']) ->where('info->nickname','ThinkPHP') ->find(); dump($user);
情報フィールドはJSONタイプである必要があり、MySQLがそれをサポートするにはバージョン5.7が必要です
もちろん、マルチレベルもサポートできます。
$user = Db::name('user') ->json(['info']) ->where('info->profile->nickname','ThinkPHP') ->find(); dump($user);
JSON フィールドの属性タイプは自動的に取得されないため、整数データ クエリの場合は、手動でパラメータ バインドする必要があります。例:
$user = Db::name('user') ->json(['info']) ->where('info->user_id', ':user_id') ->bind(['user_id' => [10, \PDO::PARAM_INT]]) ->find(); dump($user);
# #データ更新
完全な JSON データ更新
$data['info'] = [ 'email' => 'kancloud@qq.com', 'nickname' => 'kancloud', ]; Db::name('user') ->json(['info']) ->where('id',1) ->update($data);
このクエリでは、情報フィールドに JSON タイプを使用する必要は厳密にはありませんJSON データ内の特定の値のみを更新する場合は、次のメソッドを使用できます。
$data['info->nickname'] = 'ThinkPHP'; Db::name('user') ->json(['info']) ->where('id',1) ->update($data);
情報フィールドが JSON タイプであることも必要です
モデル操作 JSON データ
モデルがデータベース上で動作する場合、JSON データ操作はさらに簡単になります。 json 属性定義を User モデル クラスに追加するだけです。<?php namespace app\index\model; use think\Model; class User extends Model { // 设置json类型字段 protected $json = ['info']; }
データの書き込み
配列メソッドを使用して JSON データを書き込みます:$user = new User; $user->name = 'thinkphp'; $user->info = [ 'email' => 'thinkphp@qq.com', 'nickname '=> '流年', ]; $user->save();
$user = new User; $user->name = 'thinkphp'; $info = new StdClass(); $info->email = 'thinkphp@qq.com'; $info->nickname = '流年'; $user->info = $info; $user->save();
クエリ データ
結果の型は Db クラスのクエリとは異なり、モデルの JSON フィールドは自動的にオブジェクトに変換されます。$user = User::get(1); echo $user->name; // thinkphp echo $user->info->email; // thinkphp@qq.com echo $user->info->nickname; // 流年
$user = User::where('info->nickname','流年')->find(); echo $user->name; // thinkphp echo $user->info->email; // thinkphp@qq.com echo $user->info->nickname; // 流年
$user = User::where('info->user_id',':user_id') ->bind(['user_id' => [10 ,\PDO::PARAM_INT]]) ->find(); echo $user->name; // thinkphp echo $user->info->email; // thinkphp@qq.com echo $user->info->nickname; // 流年
<?php namespace app\index\model; use think\Model; class User extends Model { // 设置json类型字段 protected $json = ['info']; // 设置JSON字段的类型 protected $jsonType = [ 'user_id'=>'int' ]; }
データの更新
JSON データの更新にもオブジェクトが使用されます$user = User::get(1); $user->name = 'kancloud'; $user->info->email = 'kancloud@qq.com'; $user->info->nickname = 'kancloud'; $user->save();
ThinkPHP 入門チュートリアル が多数あり、誰でも学習することができます。
この記事は https://blog.thinkphp.cn/784281から転載しています。
以上がThinkPHP: JSON フィールド タイプ (ORM) の使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

PHP 配列を JSON に変換するためのパフォーマンスの最適化方法には、JSON 拡張機能と json_encode() 関数の使用、文字エスケープを回避するためのバッファーの使用、およびサードパーティのエンコード結果の使用の検討が含まれます。 JSONエンコーディングライブラリ。

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

Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化を制御します。 シリアル化: @JsonIgnore: プロパティを無視します @JsonProperty: 名前を指定します @JsonGetter: get メソッドを使用します @JsonSetter: set メソッドを使用します Deserialization: @JsonIgnoreProperties: プロパティ @ JsonProperty を無視します:名前を指定 @JsonCreator: コンストラクターを使用 @JsonDeserialize: カスタム ロジック

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