ThinkPHP 5.1 ist seit einiger Zeit offiziell veröffentlicht und ich werde Ihnen nach und nach die neuen Funktionen vorstellen. Was ich Ihnen heute vorstellen möchte, ist eine Funktion, die viele Benutzer möglicherweise noch nicht verstehen: JSON-Felddatenunterstützung.
Bitte beachten Sie jedoch zunächst, dass die in diesem Artikel beschriebene Unterstützung für JSON-Felddaten ab Version V5.1.4 eingeführt wurde. Aufgrund der Einbindung von Sicherheitsupdates wird empfohlen, unbedingt Version 5.1.9+ zu verwenden.
Die Definition des JSON-Felds in diesem Artikel umfasst den JSON-Typ oder den Zeichentyp, bei dem die gespeicherten Daten im JSON-Format vorliegen. Daher gibt es theoretisch keine Anforderungen an den Datenbanktyp und die Version, außer bei der Verwendung einer bedingten JSON-Feldabfrage.
Db-Klasse betreibt JSON
Wenn Sie die Modellklasse nicht verwenden, stellt die Db-Klasse eine JSON-Methode zur Angabe Ihrer bereit Felder im JSON-Format der Datentabelle. Ihre Benutzertabelle verfügt beispielsweise über ein Infofeld vom Typ JSON. Sie können die Daten mit der folgenden Methode bearbeiten.
Datenschreiben
$user['name'] = 'thinkphp'; $user['info'] = [ 'email' => 'thinkphp@qq.com', 'nickname' => '流年', ]; Db::name('user') ->json(['info']) ->insert($user);
Der Parameter der JSON-Methode ist ein Array. Im Beispiel können mehrere Felder vom Typ JSON angegeben werden .
Datenabfrage
Fragen Sie die gesamten JSON-Daten ab.
$user = Db::name('user') ->json(['info']) ->find(1); dump($user);
Die zurückgegebenen Abfrageergebnisdaten enthalten automatisch einen Array-Typ von Informationsdaten, was bedeutet, dass die Daten im JSON-Format automatisch von json_decode verarbeitet wurden.
Diese Abfragemethode erfordert nicht unbedingt die Verwendung des JSON-Typs für das Infofeld
Wenn Sie eine Abfrage basierend auf dem Wert von JSON-Daten benötigen, können Sie dies tun Verwenden Sie die folgende Methode
$user = Db::name('user') ->json(['info']) ->where('info->nickname','ThinkPHP') ->find(); dump($user);
Erfordert, dass das Infofeld vom Typ JSON ist. MySQL erfordert Version 5.7+ zur Unterstützung
Natürlich kann es auch mehrere unterstützen. Ebene
$user = Db::name('user') ->json(['info']) ->where('info->profile->nickname','ThinkPHP') ->find(); dump($user);
Da die Attributtypen von JSON-Feldern nicht vorhanden sind Es wird nicht automatisch abgerufen. Wenn es sich also um eine ganzzahlige Datenabfrage handelt, ist eine manuelle Parameterbindung erforderlich, zum Beispiel:
$user = Db::name('user') ->json(['info']) ->where('info->user_id', ':user_id') ->bind(['user_id' => [10, \PDO::PARAM_INT]]) ->find(); dump($user);
Datenaktualisierung
Vollständige JSON-Datenaktualisierung
$data['info'] = [ 'email' => 'kancloud@qq.com', 'nickname' => 'kancloud', ]; Db::name('user') ->json(['info']) ->where('id',1) ->update($data);
Diese Abfrage erfordert nicht unbedingt die Verwendung des JSON-Typs für das Infofeld
Wenn Sie nur einen bestimmten Wert in den JSON-Daten aktualisieren, können Sie die folgende Methode verwenden:
$data['info->nickname'] = 'ThinkPHP'; Db::name('user') ->json(['info']) ->where('id',1) ->update($data);
Es ist außerdem erforderlich, dass das Infofeld vom Typ JSON sein muss
Das Modell betreibt JSON-Daten
Wenn Sie verwenden: Wenn das Modell die Datenbank betreibt, wird die JSON-Datenoperation einfacher.
Wir müssen nur eine JSON-Attributdefinition zur Benutzermodellklasse hinzufügen. Das
<?php namespace app\index\model; use think\Model; class User extends Model { // 设置json类型字段 protected $json = ['info']; }
json-Attribut unterstützt auch die Definition mehrerer Feldnamen. Nach der Definition können die folgenden JSON-Datenoperationen ausgeführt werden.
Daten schreiben
Array-Methode verwenden, um JSON-Daten zu schreiben:
$user = new User; $user->name = 'thinkphp'; $user->info = [ 'email' => 'thinkphp@qq.com', 'nickname '=> '流年', ]; $user->save();
Objektmethode verwenden, um JSON-Daten zu schreiben
$user = new User; $user->name = 'thinkphp'; $info = new StdClass(); $info->email = 'thinkphp@qq.com'; $info->nickname = '流年'; $user->info = $info; $user->save();
Daten abfragen
Der Ergebnistyp unterscheidet sich von der Db-Klassenabfrage. Das JSON-Feld des Modells wird automatisch in den Objektmodus konvertiert.
$user = User::get(1); echo $user->name; // thinkphp echo $user->info->email; // thinkphp@qq.com echo $user->info->nickname; // 流年
kann auch die Abfrage von JSON-Felddaten unterstützen.
$user = User::where('info->nickname','流年')->find(); echo $user->name; // thinkphp echo $user->info->email; // thinkphp@qq.com echo $user->info->nickname; // 流年
ist dasselbe wie eine DB-Abfrage. Wenn das JSON-Attribut, das Sie abfragen müssen, ein Ganzzahltyp ist, ist eine manuelle Parameterbindung erforderlich.
$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; // 流年
Wenn Sie Version V5.1.11+ verwenden, können Sie den Attributtyp des JSON-Felds in der Modellklasse definieren und der entsprechende Typ der Parameterbindungsabfrage wird automatisch durchgeführt.
<?php namespace app\index\model; use think\Model; class User extends Model { // 设置json类型字段 protected $json = ['info']; // 设置JSON字段的类型 protected $jsonType = [ 'user_id'=>'int' ]; }
Attribute ohne definierten Typ verwenden standardmäßig den String-Typ, sodass String-Typ-Attribute nicht definiert werden müssen.
Daten aktualisieren
Beim Aktualisieren von JSON-Daten werden auch Objekte verwendet
$user = User::get(1); $user->name = 'kancloud'; $user->info->email = 'kancloud@qq.com'; $user->info->nickname = 'kancloud'; $user->save();
Wenn Sie komplexere Vorgänge für Felder vom Typ JSON ausführen müssen, können Sie auch Abgeschlossen ausführen durch exp-Ausdruck. Dies wartet darauf, dass jeder mehr über die JSON-Nutzung entdeckt.
Die chinesische PHP-Website bietet eine große Anzahl kostenloser ThinkPHP-Einführungs-Tutorials, zum Lernen ist jeder herzlich willkommen!
Dieser Artikel wurde reproduziert von: https://blog.thinkphp.cn/784281
Das obige ist der detaillierte Inhalt vonThinkPHP: Verwendung des JSON-Feldtyps (ORM). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!