ホームページ PHPフレームワーク ThinkPHP ThinkPHP: JSON フィールド タイプ (ORM) の使用法

ThinkPHP: JSON フィールド タイプ (ORM) の使用法

Dec 16, 2019 pm 03:52 PM
json orm thinkphp フィールドタイプ

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 = [&#39;info&#39;];
}
ログイン後にコピー

json 属性では、複数のフィールド名の定義もサポートされており、定義後は次の JSON データ操作を実行できます。

データの書き込み

配列メソッドを使用して JSON データを書き込みます:

$user = new User;
$user->name = &#39;thinkphp&#39;;
$user->info = [
&#39;email&#39;    => &#39;thinkphp@qq.com&#39;,
    &#39;nickname &#39;=> &#39;流年&#39;,
];
$user->save();
ログイン後にコピー

オブジェクト メソッドを使用して JSON データを書き込みます

$user = new User;
$user->name = &#39;thinkphp&#39;;
$info = new StdClass();
$info->email = &#39;thinkphp@qq.com&#39;;
$info->nickname = &#39;流年&#39;;
$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; // 流年
ログイン後にコピー

JSON フィールド データのクエリもサポートできます

$user = User::where(&#39;info->nickname&#39;,&#39;流年&#39;)->find();
echo $user->name; // thinkphp
echo $user->info->email; // thinkphp@qq.com
echo $user->info->nickname; // 流年
ログイン後にコピー

Db クラス クエリと同様に、クエリする必要がある JSON 属性が整数型の場合は、手動パラメータ バインディングが必要です。

$user = User::where(&#39;info->user_id&#39;,&#39;:user_id&#39;)
->bind([&#39;user_id&#39; => [10 ,\PDO::PARAM_INT]])
->find();
echo $user->name; // thinkphp
echo $user->info->email; // thinkphp@qq.com
echo $user->info->nickname; // 流年
ログイン後にコピー

バージョン V5.1.11 を使用している場合は、モデル クラスで JSON フィールドの属性タイプを定義でき、対応するタイプのパラメータ バインディング クエリが自動的に実行されます。

<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
// 设置json类型字段
protected $json = [&#39;info&#39;];
    
    // 设置JSON字段的类型
    protected $jsonType = [
    &#39;user_id&#39;=>&#39;int&#39;
    ];
}
ログイン後にコピー

タイプが定義されていない属性はデフォルトで文字列タイプになるため、文字列タイプの属性を定義する必要はありません。

データの更新

JSON データの更新にもオブジェクトが使用されます

$user = User::get(1);
$user->name = &#39;kancloud&#39;;
$user->info->email = &#39;kancloud@qq.com&#39;;
$user->info->nickname = &#39;kancloud&#39;;
$user->save();
ログイン後にコピー
JSON タイプのフィールドに対してより複雑な操作を実行する必要がある場合は、完了することもできます。 exp式で。これは、誰もが JSON の使用法をさらに発見するのを待っています。

PHP 中国語 Web サイトには、無料の

ThinkPHP 入門チュートリアル が多数あり、誰でも学習することができます。

この記事は https://blog.thinkphp.cn/784281

から転載しています。

以上がThinkPHP: JSON フィールド タイプ (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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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 を使用できます。

PHP 配列を JSON に変換するためのパフォーマンス最適化のヒント PHP 配列を JSON に変換するためのパフォーマンス最適化のヒント May 04, 2024 pm 06:15 PM

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

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

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

Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化をどのように制御しますか? Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化をどのように制御しますか? May 06, 2024 pm 10:09 PM

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

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

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

See all articles