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

爱喝马黛茶的安东尼
リリース: 2019-12-16 15:52:48
転載
3766 人が閲覧しました

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

ソース:thinkphp.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!