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 サイトの他の関連記事を参照してください。