Maison cadre php PensezPHP ThinkPHP : utilisation du type de champ JSON (ORM)

ThinkPHP : utilisation du type de champ JSON (ORM)

Dec 16, 2019 pm 03:52 PM
json orm thinkphp 字段类型

ThinkPHP : utilisation du type de champ JSON (ORM)

ThinkPHP 5.1 est officiellement sorti depuis un certain temps, et je vais vous présenter ses nouvelles fonctionnalités les unes après les autres. Ce que je souhaite vous présenter aujourd'hui est une fonctionnalité que de nombreux utilisateurs ne comprennent peut-être pas encore : la prise en charge des données de champ JSON.

Mais tout d'abord, veuillez noter que le support des données de champ JSON décrites dans cet article a été introduit à partir de la version V5.1.4+. Il est recommandé de s'assurer d'utiliser la version 5.1.9+ en raison de l'inclusion de mises à jour de sécurité.

La définition du champ JSON dans cet article inclut le type JSON ou le type de caractère où les données enregistrées sont au format JSON. Par conséquent, en théorie, il n'y a aucune exigence concernant le type et la version de la base de données, sauf en utilisant une requête conditionnelle de champ JSON.

La classe Db fonctionne en JSON

Si vous n'utilisez pas la classe model, la classe Db fournit une méthode json pour spécifier votre Champs au format JSON de la table de données. Par exemple, votre table utilisateur comporte un champ d'informations de type JSON. Vous pouvez utiliser la méthode suivante pour manipuler les données.

Écriture des données

$user['name'] = 'thinkphp';
$user['info'] = [
'email'    => 'thinkphp@qq.com',
'nickname' => '流年',
];
Db::name('user')
->json(['info'])
->insert($user);
Copier après la connexion

Le paramètre de la méthode json est un tableau Le champ info est spécifié dans l'exemple. En fait, plusieurs champs de type JSON peuvent être spécifiés. .

Requête de données

Interrogez l'intégralité des données JSON.

$user = Db::name('user')
->json(['info'])
->find(1);
dump($user);
Copier après la connexion

Les données du résultat de la requête renvoyées incluront automatiquement un type de tableau de données d'informations, ce qui signifie que les données au format JSON ont été automatiquement traitées par json_decode.

Cette méthode de requête ne nécessite pas strictement l'utilisation du type JSON pour le champ d'information

Si vous devez interroger en fonction de la valeur des données JSON, vous pouvez utilisez la méthode suivante

$user = Db::name('user')
->json(['info'])
    ->where('info->nickname','ThinkPHP')
->find();
dump($user);
Copier après la connexion

Nécessite que le champ d'information soit de type JSON. MySQL nécessite la version 5.7+ pour prendre en charge

Bien sûr, il peut également prendre en charge plusieurs- niveau

$user = Db::name('user')
->json(['info'])
    ->where('info->profile->nickname','ThinkPHP')
->find();
dump($user);
Copier après la connexion

Étant donné que les types d'attributs des champs JSON ne le sont pas, il ne sera pas obtenu automatiquement, donc s'il s'agit d'une requête de données entières, une liaison manuelle des paramètres est requise, par exemple :

$user = Db::name('user')
->json(['info'])
    ->where('info->user_id', ':user_id')
    ->bind(['user_id' => [10, \PDO::PARAM_INT]])
->find();
dump($user);
Copier après la connexion

Mise à jour des données

Mise à jour complète des données JSON

$data['info'] = [
'email'    => 'kancloud@qq.com',
'nickname' => 'kancloud',
];
Db::name('user')
->json(['info'])
    ->where('id',1)
->update($data);
Copier après la connexion

Cette requête ne nécessite pas strictement l'utilisation du type JSON pour le champ d'information

Si vous venez de mettre à jour une certaine valeur dans les données JSON, vous pouvez utiliser la méthode suivante :

$data['info->nickname'] = 'ThinkPHP';
Db::name('user')
->json(['info'])
    ->where('id',1)
->update($data);
Copier après la connexion

Il est également obligatoire que le champ d'information soit de type JSON

Le modèle exploite les données JSON

Si vous utilisez Si le modèle exploite la base de données, l'opération sur les données JSON sera encore plus simple.

Il suffit d'ajouter une définition d'attribut json à la classe de modèle User. L'attribut

<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
// 设置json类型字段
protected $json = [&#39;info&#39;];
}
Copier après la connexion

json prend également en charge la définition de plusieurs noms de champs. Après la définition, les opérations de données JSON suivantes peuvent être effectuées.

Écrire des données

Utiliser la méthode tableau pour écrire des données 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();
Copier après la connexion

Utiliser la méthode objet pour écrire des données 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();
Copier après la connexion

Données de requête

Le type de résultat est différent de la requête de classe Db Le champ JSON du modèle sera automatiquement converti en mode objet.

$user = User::get(1);
echo $user->name; // thinkphp
echo $user->info->email; // thinkphp@qq.com
echo $user->info->nickname; // 流年
Copier après la connexion

peut également prendre en charge l'interrogation des données de champ 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; // 流年
Copier après la connexion

Tout comme la requête Db, si l'attribut JSON que vous devez interroger est de type entier, une liaison manuelle des paramètres est requise.

$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; // 流年
Copier après la connexion

Si vous utilisez la version V5.1.11+, vous pouvez définir le type d'attribut du champ JSON dans la classe de modèle, et le type de requête de liaison de paramètre correspondant sera automatiquement effectué.

<?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;
    ];
}
Copier après la connexion

Les attributs sans type défini sont par défaut de type chaîne, donc les attributs de type chaîne n'ont pas besoin d'être définis.

Mettre à jour les données

La mise à jour des données JSON utilise également des objets

$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();
Copier après la connexion

Si vous devez effectuer des opérations plus complexes sur des champs de type JSON, vous pouvez également Terminé par expression exp. Cela attend que tout le monde découvre davantage d’utilisations de JSON.

Le site Web PHP chinois propose un grand nombre de Tutoriels d'introduction ThinkPHP gratuits, tout le monde est invité à apprendre !

Cet article est reproduit à partir de : https://blog.thinkphp.cn/784281

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment exécuter le projet thinkphp Comment exécuter le projet thinkphp Apr 09, 2024 pm 05:33 PM

Pour exécuter le projet ThinkPHP, vous devez : installer Composer ; utiliser Composer pour créer le projet ; entrer dans le répertoire du projet et exécuter php bin/console serve ; visiter http://localhost:8000 pour afficher la page d'accueil.

Il existe plusieurs versions de thinkphp Il existe plusieurs versions de thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP dispose de plusieurs versions conçues pour différentes versions de PHP. Les versions majeures incluent 3.2, 5.0, 5.1 et 6.0, tandis que les versions mineures sont utilisées pour corriger les bogues et fournir de nouvelles fonctionnalités. La dernière version stable est ThinkPHP 6.0.16. Lorsque vous choisissez une version, tenez compte de la version PHP, des exigences en matière de fonctionnalités et du support de la communauté. Il est recommandé d'utiliser la dernière version stable pour de meilleures performances et une meilleure assistance.

Comment exécuter thinkphp Comment exécuter thinkphp Apr 09, 2024 pm 05:39 PM

Étapes pour exécuter ThinkPHP Framework localement : Téléchargez et décompressez ThinkPHP Framework dans un répertoire local. Créez un hôte virtuel (facultatif) pointant vers le répertoire racine ThinkPHP. Configurez les paramètres de connexion à la base de données. Démarrez le serveur Web. Initialisez l'application ThinkPHP. Accédez à l'URL de l'application ThinkPHP et exécutez-la.

Conseils d'optimisation des performances pour la conversion de tableaux PHP en JSON Conseils d'optimisation des performances pour la conversion de tableaux PHP en JSON May 04, 2024 pm 06:15 PM

Les méthodes d'optimisation des performances pour la conversion des tableaux PHP en JSON incluent : l'utilisation d'extensions JSON et de la fonction json_encode() ; l'ajout de l'option JSON_UNESCAPED_UNICODE pour éviter l'échappement de caractères ; l'utilisation de tampons pour améliorer les performances d'encodage de boucle et l'utilisation d'un tiers ; Bibliothèque d'encodage JSON.

Comment utiliser le mappage objet-relationnel (ORM) en PHP pour simplifier les opérations de base de données ? Comment utiliser le mappage objet-relationnel (ORM) en PHP pour simplifier les opérations de base de données ? May 07, 2024 am 08:39 AM

Les opérations de base de données en PHP sont simplifiées à l'aide d'ORM, qui mappe les objets dans des bases de données relationnelles. EloquentORM dans Laravel vous permet d'interagir avec la base de données en utilisant une syntaxe orientée objet. Vous pouvez utiliser ORM en définissant des classes de modèle, en utilisant des méthodes Eloquent ou en créant un système de blog dans la pratique.

Comment Hibernate implémente-t-il le mappage polymorphe ? Comment Hibernate implémente-t-il le mappage polymorphe ? Apr 17, 2024 pm 12:09 PM

Le mappage polymorphe Hibernate peut mapper les classes héritées à la base de données et fournit les types de mappage suivants : join-subclass : crée une table séparée pour la sous-classe, incluant toutes les colonnes de la classe parent. table par classe : créez une table distincte pour les sous-classes, contenant uniquement des colonnes spécifiques aux sous-classes. union-subclass : similaire à join-subclass, mais la table de classe parent réunit toutes les colonnes de la sous-classe.

Comment les annotations de la bibliothèque Jackson contrôlent-elles la sérialisation et la désérialisation JSON ? Comment les annotations de la bibliothèque Jackson contrôlent-elles la sérialisation et la désérialisation JSON ? May 06, 2024 pm 10:09 PM

Les annotations dans la bibliothèque Jackson contrôlent la sérialisation et la désérialisation JSON : Sérialisation : @JsonIgnore : Ignorer la propriété @JsonProperty : Spécifiez le nom @JsonGetter : Utilisez la méthode get @JsonSetter : Utilisez la méthode set Désérialisation : @JsonIgnoreProperties : Ignorez la propriété @ JsonProperty : Spécifiez le nom @JsonCreator : utilisez le constructeur @JsonDeserialize : logique personnalisée

Comment installer thinkphp Comment installer thinkphp Apr 09, 2024 pm 05:42 PM

Étapes d'installation de ThinkPHP : Préparez les environnements PHP, Composer et MySQL. Créez des projets à l'aide de Composer. Installez le framework ThinkPHP et ses dépendances. Configurez la connexion à la base de données. Générez le code de l'application. Lancez l'application et visitez http://localhost:8000.

See all articles