Maison cadre php PensezPHP qu'est-ce que orm dans thinkphp

qu'est-ce que orm dans thinkphp

Feb 14, 2022 pm 05:04 PM
orm thinkphp

Dans thinkphp, ORM fait référence à « Object Relational Mapping », qui est une couche d'accès au stockage développée pour faciliter l'utilisation des bases de données par les développeurs ; l'objectif principal d'ORM est de mapper les objets représentés par le modèle objet à la base de données de modèle relationnel basée sur SQL ; structure Entrez.

qu'est-ce que orm dans thinkphp

L'environnement d'exploitation de ce tutoriel : système Windows 7, version thinkphp v5.1, ordinateur Dell G3.

thinkphp ORM

Le nom complet de ORM est Object Relational Mapping, c'est-à-dire mappage relationnel d'objet

  • O (Object) L'objet, dans le projet, est l'entité, plus précisément, c'est le modèle de données , c'est-à-dire qu'on peut dire que la classe de persistance.

  • R (Relation) Données relationnelles

  • M (Mapping) mappage, le processus de mappage d'objets à des données relationnelles et de mappage de données relationnelles à des objets.

Une compréhension plus intuitive est que ORM utilise la pensée POO pour générer des instructions d'ajout, de suppression, de modification et d'interrogation SQL.

L'ORM de ThinkPHP est une couche d'accès au stockage développée pour faciliter l'utilisation des bases de données par les développeurs. L'image de conception du cadre est la suivante :

qu'est-ce que orm dans thinkphp

L'objectif principal est de mapper les objets représentés par le modèle objet à la structure de la base de données du modèle relationnel basée sur SQL.

Lors de la modification des propriétés de l'objet lui-même ou de l'appel de la méthode de l'objet, l'exécution correspondante de certaines instructions SQL est.

Ceux qui écrivent du code de cette manière peuvent mieux écrire une logique métier au lieu d'écrire à plusieurs reprises des instructions SQL d'ajout, de suppression, de modification et d'interrogation.

Exemples d'utilisation dans thinkphp

Il existe deux modules pour les opérations de base de données dans le framework TP :

  • Database

  • Model

Module de base de données dans tp

citer un document Le description de la fonctionnalité

est divisée en Connexion (Connecteur)/Requête (Requête)/Builder (Générateur SQL)

  • Le connecteur de connexion est principalement utilisé pour se connecter à la base de données, et différents pilotes peuvent être utilisés pour connecter différents types de base de données.

  • La requête est utilisée pour exécuter des instructions SQL, traiter les résultats et les mapper à l'ensemble de données.

  • Le générateur Builder est utilisé pour convertir les conditions, le tri, etc. que nous transmettons en instructions SQL.

Dans ces 3 étapes, on peut savoir que s'il existe une cartographie abstraite des idées ORM, il ne peut s'agir que du module de requête Query, mais on peut vérifier attentivement la description de l'ensemble de données dans le document TP.

Il s'agit davantage d'encapsuler et de fournir des méthodes de traitement de données, telles que :

(Ce qui suit est une petite partie copiée du document)

toArray     将数据集的数据转为数组
merge   合并其它数据
diff    比较数组,返回差集
flip    交换数据中的键和值
intersect   比较数组,返回交集
keys    返回数据中的所有键名
pop 删除数据中的最后一个元素
shift   删除数据中的第一个元素
unshift 在数据开头插入一个元素
reduce  通过使用用户自定义函数,以字符串返回数组
Copier après la connexion

Mais il ne fournit pas d'opérations relationnelles de mappage inverse, comme lorsque nous exploitons des ensembles de données , met automatiquement à jour les données dans la base de données.

Donc, à ma connaissance, il n'y a pas beaucoup d'idées ORM dans le module de base de données. La clé est de comprendre et d'appliquer le modèle

Le modèle dans tp

définir le fichier modèle

namespace app\index\model;

use think\Model;

// 设置类名 需要遵循转换规则,蛇形转为大驼峰
class User extends Model
{
    // 设置主键字段名
    protected $pk = 'u_id';

    // 开启自动维护时间戳字段 (什么时间插入 什么时间更新)
    protected $autoWriteTimestamp = true;

    // 软删除 开启之后 删除数据只是用一个字段来标识为删除状态 方便查询、备份等
    use SoftDelete;
    protected $deleteTime = 'delete_time';

}
Copier après la connexion

Le code ci-dessus est meilleur que. le premier chapitre du document Il y a un peu plus de contenu dans la section initialisation du modèle. C'est pour souligner que le modèle peut remplir de nombreuses fonctions

C'est aussi la raison de l'émergence de l'ORM : mapper abstraitement l'exécution de SQL aux objets. en programmation orientée objet.

Nous pouvons le comprendre comme : une ligne de données dans le tableau représente un nouvel objet dans notre code. Si l'objet est modifié, la ligne correspondante dans le tableau sera automatiquement mise à jour.

Utilisation du modèle

Le code démontré est relativement simple, mais il peut en fait être très flexible

Par exemple, interroger à l'aide de conditions de clé non primaire, interroger plusieurs lignes d'enregistrements, etc.

<?php
// *******快速查询、更新*******
// 查询主键=1的数据
$user = User::get(1);
// 然后更改它的name字段为新的值
$user->name = &#39;thinkphp&#39;;
// 保存,自己去数据库给我更新吧~
$user->save();

// *******插入新的一行数据*******
// 新建一个对象(相对应的操作就是新创建一行)
$user = new User;
// 设置字段的值  有多个字段就多个设置
$user->name= &#39;thinkphp&#39;;
// 保存,自己去插入吧~
$user->save();
Copier après la connexion

Malentendu

Je l'ai vu Après l'avoir utilisé, de nombreux débutants commencent à écrire du code, mais ils l'utilisent de manière incorrecte.

① Le modèle ne doit être utilisé que pour la classe Db

Bien que le modèle puisse être considéré comme un surensemble de la classe db, s'il est simplement utilisé comme une simple classe DB, il n'est pas écrit en utilisant des idées ORM. Il n’est alors pas nécessaire de l’utiliser. .

Si vous l'utilisez incorrectement, non seulement cela ne parviendra pas à améliorer l'efficacité, mais cela vous affectera en fait. (Par exemple, les spécifications du code ne sont pas unifiées, de nouvelles tables doivent être ajoutées avec les fichiers de modèle correspondants, etc.)

Démonstration du code :

<?php
$userModel = new User(); // 这里就相当于初始化Db类
$userOneInfo = $userModel->where([&#39;u_id&#39; => 1])->find();

$userTwoInfo = $userModel->where([&#39;u_id&#39; => 2])->find();
// ... 执行其他逻辑 比如判断上下级 操作权限等等

// 业务需求不只是读取用户的数据这么简单
// 还要扣除余额(就是更新数据库)
$userOneRes = $userModel->where([&#39;u_id&#39; => 1])->update([&#39;u_balance&#39; => &#39;xxxx&#39;]);

// ... 执行其他逻辑
Copier après la connexion

Quand vous voyez cela, arrêtez-vous et réfléchissez-y. . Votre code a-t-il déjà ressemblé à ceci ?

Je crois que certaines personnes l'utilisent encore comme ça ! Parce que je l'utilisais de cette façon.

Ensuite, regardons la bonne façon de l'utiliser (à mon avis, si vous pensez que c'est faux ou si vous en avez une meilleure, merci de commenter et d'échanger)

<?php

$userOneInfo = User::get(1);

// 这里演示使用非主键条件查询的情况!!
// 查询一个1用户的下级出来
$userTwoInfo = User::get(function($query){
    $query->where([&#39;p_uid&#39; => 1]);
});

// ... 执行其他逻辑 比如判断上下级 操作权限等等

// 业务需求不只是读取用户的数据这么简单
// 还要扣除余额(就是更新数据库)
$userOneInfo->u_balance = 0;
$userOneRes = $userOneInfo->save();

$userTwoInfo->u_balance = 0;
$userTwoRes =  $userTwoInfo->save();

// ... 执行其他逻辑
Copier après la connexion

Parce qu'un objet mappe une donnée, nous opérons les données avec la même condition où fonctionner directement et l'objet suffisent, Il n'est pas nécessaire d'écrire à plusieurs reprises où u_id = 1 update, u_id = 1 to delete

En utilisant le modèle, il existe de nombreuses utilisations (grâce au dévouement de l'équipe open source, qui a encapsulé pour nous un grand nombre de fonctions )

Par exemple :

– Lorsqu'une nouvelle donnée est ajoutée à la table utilisateur, une autre table subsidiaire doit également initialiser une ligne avec l'ID utilisateur.

– Convertissez automatiquement le format des données (enregistrez l'horodatage et la requête sera au format 2019-7-13 19:53:04).

– Vérifiez automatiquement les données et complétez automatiquement les données (les autorisations IP de l'opérateur, etc. sont stockées par défaut pendant le fonctionnement).

– Requête d'association (une fonction très puissante dans TP. La relation avec un autre modèle est définie dans le modèle. Par exemple, le u_id dans la table du magasin peut être utilisé pour interroger les informations de l'utilisateur qui appartient au magasin. Il équivaut à l'association entre le modèle de magasin et le modèle utilisateur. La fusion automatique des données de jointure nous est renvoyée pour utilisation)

– Attendez

Résumé

ORM est une idée, un concept, représentant un mappage objet-relationnel. (mappage base de données-objet) ORM résume l'opération des données en tant qu'opérations sur les objets. Apprenez à changer votre façon de penser, à faire bon usage des fonctionnalités fournies par le framework et à écrire un meilleur code. Le modèle de TP est très puissant et contient beaucoup de logique.

【Recommandation de tutoriel connexe : thinkphp framework

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)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

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.

Lequel est le meilleur, Laravel ou thinkphp ? Lequel est le meilleur, Laravel ou thinkphp ? Apr 09, 2024 pm 03:18 PM

Comparaison des performances des frameworks Laravel et ThinkPHP : ThinkPHP fonctionne généralement mieux que Laravel, en se concentrant sur l'optimisation et la mise en cache. Laravel fonctionne bien, mais pour les applications complexes, ThinkPHP peut être mieux adapté.

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 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.

Quelles sont les performances de thinkphp ? Quelles sont les performances de thinkphp ? Apr 09, 2024 pm 05:24 PM

ThinkPHP est un framework PHP hautes performances présentant des avantages tels que le mécanisme de mise en cache, l'optimisation du code, le traitement parallèle et l'optimisation des bases de données. Les tests de performances officiels montrent qu'il peut gérer plus de 10 000 requêtes par seconde et qu'il est largement utilisé dans les sites Web à grande échelle et les systèmes d'entreprise tels que JD.com et Ctrip dans les applications réelles.

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.

See all articles