Maison  >  Article  >  cadre php  >  Analyse approfondie du modèle de requête de base de données ThinkPHP

Analyse approfondie du modèle de requête de base de données ThinkPHP

咔咔
咔咔original
2021-01-08 10:41:211971parcourir
«

Nous avons parlé de la méthode Db de requête de base de données ThinkPHP Aujourd'hui, nous parlerons brièvement de la mise en œuvre du modèle. classe. Concept de modèle, cette utilisation représente la grande majorité de l’utilisation du framework.

Ensuite, Kaka continuera à mener une analyse approfondie du modèle sur la base de ce qui précède, alors préparez maintenant votre banc et mangez quelques graines de melon pour lire cet article !
L'organigramme d'exécution de la classe Db fourni ci-dessus est également publié pour que vous puissiez vous familiariser avec.

Processus d'exécution de la classe Db

Jetez un bref aperçu de quelques fichiers d'utilisation du modèle

Le répertoire modèle doit exister dans le répertoire du module
Analyse approfondie du modèle de requête de base de données ThinkPHP
Répertoire modèle

La première est qu'ArrayAccess accède aux propriétés d'un objet comme un tableau.

La deuxième fonctionnalité est la super classe (trait), qui implémente en fait une fonction similaire à l'héritage multiple, mais rappelez-vous que PHP n'a pas d'héritage multiple et que les deux concepts ne peuvent pas être confondus.

Analyse approfondie du modèle de requête de base de données ThinkPHP
La couche inférieure du framework de classe modèle

Ensuite, il y a aussi un dossier modèle au bas du framework, qui utilise également les mêmes fonctions que la classe DB.

Par exemple, connecteurs, requêtes, générateurs

Analyse approfondie du modèle de requête de base de données ThinkPHP
Fichiers de base des classes de modèles

Après une brève compréhension, nous devons comprendre le modèle Un des cas a été analysé, juste pour la mise en œuvre d'un cas !

2. Analyse du nouveau code source logique dans l'analyse de scénario de modèle

Ce cas utilise les nouvelles actions du modèle Analyse de cas et analyse approfondie du code source.

Tout d'abord, vous devez créer le fichier modèle. Kaka utilise toujours la ligne de commande pour créer des fichiers. L'avantage d'utiliser la ligne de commande pour créer des fichiers est de vous éviter de faire des erreurs avec l'espace de noms lors de la création. fichiers .

Analyse approfondie du modèle de requête de base de données ThinkPHP
Créez le fichier modèle

Ensuite, implémentez la première fonction et utilisez le modèle pour l'ajouter. Le contenu de cette pièce est vraiment très simple, juste un. quelques clics Cette étape est très basique. Le travail principal de Kaka est d'analyser le processus de mise en œuvre pour tout le monde.

Le cas dans le contrôleur est le suivant. Faites attention à la manière d'écrire Kaka ici.

Analyse approfondie du modèle de requête de base de données ThinkPHP
Implémentation du cas dans le contrôleur

Permettez-moi de parler brièvement de la raison pour laquelle Kaka écrit de cette façon et quels sont les avantages de l'écrire de cette façon.

Tout d’abord, il est essentiel de présenter la classe modèle.

Déclarez ensuite une variable

La dernière étape consiste à attribuer la classe de modèle à la variable déclarée lors de l'initialisation du contrôleur.

Ensuite, utilisez simplement la variable déclarée lorsque vous l'utilisez. L'avantage est que cela peut réduire la quantité de code modifié en cas de conflit ultérieur entre les noms de vos modèles.

Vous pouvez penser à un scénario dans lequel vous prédéfinissez un nom de modèle, puis souhaitez modifier le nom du modèle plus tard. À ce stade, si vous suivez la méthode d'écriture de Kaka, vous n'avez besoin que du contrôleur. l'initialisation peut être effectuée avec une seule ligne de code.

Sinon, tout le code doit être modifié, c'est pourquoi Kaka l'écrit ainsi.

Exécutons-le d'abord et voyons les résultats de l'exécution.

Analyse approfondie du modèle de requête de base de données ThinkPHP
Résultats de l'exécution

Selon les résultats ci-dessus, nous pouvons savoir qu'il n'y a aucun problème avec la logique du code. Ensuite, nous procéderons à une entrée. Analyse approfondie de la méthode de sauvegarde et examen du modèle. Quelle est la différence avec la méthode d'exécution de la classe Db ?

Analyse approfondie de la méthode de sauvegarde

Tout d'abord, vous devez comprendre dans quel fichier ce code sera exécuté.

Analyse approfondie du modèle de requête de base de données ThinkPHP
L'analyse de cette ligne de code exécutera ce fichier

Si vous comprenez tous que ceci $this->userModel est un objet de la classe dans le modèle, alors allez directement au fichier modèle. Jetez un oeil à l'intérieur.

En fait, peu importe que vous lisiez ce fichier ou non. Nos fichiers de modèle personnalisés doivent être hérités des fichiers de modèle, qui sont les fichiers que Kaka vous a montrés au début de cet article et qui seront utilisés dans le modèle. .

Analyse approfondie du modèle de requête de base de données ThinkPHP
La relation de base entre les modèles

Ensuite, nous arrivons à la classe de modèle en bas du frameworkthinkphp/library/think/Model.php.

Vous devriez comprendre un peu après avoir vu cette méthode. Même si vous ne lisez pas la documentation, vous devriez la comprendre tout de suite. Lorsque la méthode de sauvegarde n'a qu'un seul paramètre, il est ajouté, et quand il y en a. est un deuxième paramètre, il est mis à jour.

Analyse approfondie du modèle de requête de base de données ThinkPHP
Enregistrer l'objet de données actuel

Étant donné que le paramètre donné dans le cas de Kaka est un tableau, le premier jugement ne sera pas exécuté.

Ensuite, nous procéderons à une analyse approfondie de Analyse approfondie du modèle de requête de base de données ThinkPHP dans cette méthode de sauvegarde.

Jetons un coup d'œil à ce que fait cette méthode.

Analyse approfondie du modèle de requête de base de données ThinkPHP
Vérifiez les données avant d'écrire

D'après la figure ci-dessus, nous pouvons savoir que le paramètre passé est un tableau, qui correspond aux données dont nous avons besoin pour ajouter.

L'étape la plus importante dans l'image ci-dessus est cette ligne de code$this->setAttr($key, $value, $data);

Selon les invites, vous arrivez à cette méthode Les valeurs​​des trois paramètres ont. a également été imprimé, donc le jugement est correct. Il n'y aura pas d'exécution, seulement l'étape finale de définition des propriétés de l'objet de données.

Le modificateur
修改器 设置数据对象值
définit la valeur de l'objet de données

Selon l'image ci-dessus, le résultat final du retour sera directement renvoyé à $this->checkBeforeSave($data, $where), qui est l'image ci-dessous.

Analyse approfondie du modèle de requête de base de données ThinkPHP
Vérifiez les données avant d'écrire

La ligne de code suivante $result = $this->exists ? $this->updateData($where) : $this->insertData($sequence); doit être comprise attentivement.

Tout d'abord, vous pouvez voir le premier attribut, qui est $this->exists Connaissez-vous cette valeur Oui, lors de la vérification des données avant d'écrire, elle sera définie sur true s'il y a un où ? condition. Veuillez voir l'image ci-dessous.

Analyse approfondie du modèle de requête de base de données ThinkPHP
Vérifiez les données avant d'écrire

Donc, le code exécutera $this->insertData($sequence) cette méthode, dans cette méthode, nous ne le faisons pas. Je ne fais attention à rien, l'accent principal est simplement de savoir comment ajouter des données.

Concentrez-vous simplement sur la zone encerclée par Kaka.

Analyse approfondie du modèle de requête de base de données ThinkPHP
Ajouter de nouvelles données écrites

Ensuite, le code viendra à la méthode d'insertion. Dans cette méthode, $this->parseOptions();voici le 分析表达式(可用于查询或者写入操作) contenu analysé auparavant.

Un connecteur est utilisé ici. Ce connecteur est un objet injecté par injection de dépendances dans le constructeur de cette classe.

Analyse approfondie du modèle de requête de base de données ThinkPHP
Insérer un enregistrement

Ensuite, vous arriverez à la méthode thinkphp/library/think/db/Connection.php de ce fichier. insert

appellera alors la méthode

pour exécuter l'instruction SQL, car l'instruction sql a déjà été générée. Cette méthode sera analysée en profondeur dans une nouvelle section ci-dessous. execute

Générez des instructions SQL via la classe

, puis récupérez les paramètres liés et effacez-les Enfin, utilisez l'opération d'exécution pour exécuter l'instruction SQLbuilder.

Analyse approfondie du modèle de requête de base de données ThinkPHP
Insérer un enregistrement

3. Analyse approfondie de l'exécution de l'exécution

Le cas est toujours le cas utilisé dans la section précédente

Analyse approfondie du modèle de requête de base de données ThinkPHP
Démonstration de cas

Tout d'abord, nous devons clarifier les paramètres de cette méthode. Il y a trois paramètres dans cette méthode, décrivant principalement les premier et deuxième paramètres. execute

La valeur du paramètre a été placée dans le commentaire du code.

Analyse approfondie du modèle de requête de base de données ThinkPHPEffacer les paramètres
puis analyser étape par étape. La première chose à faire est

d'initialiser la connexion à la base de données. $this->initConnect(true);

Ce que vous devez savoir dans cette méthode, c'est ce qui est jugé ici, qui est en fait ce qu'est le paramètre

. deploy

Analyse approfondie du modèle de requête de base de données ThinkPHPInitialiser la connexion à la base de données
Tout d'abord, il doit être clair que ce paramètre doit être obtenu à partir du fichier de configuration, puis ce que nous analysons est maintenant la base de données. Ensuite, ce paramètre se trouve probablement dans le fichier de configuration de la base de données.

Après avoir analysé le code, nous avons trouvé cet élément de configuration dans le fichier de configuration de la base de données. Cet élément de configuration est la méthode de déploiement de la base de données.

0 centralisé (serveur unique), 1 distribué (serveur maître-esclave). Dans ce cas, ou en fonctionnement réel du projet, les bases de données distribuées ne seront pas utilisées dans le framework, il n'est donc pas nécessaire de le comprendre. .

Analyse approfondie du modèle de requête de base de données ThinkPHP
Fichier de configuration de la base de données

Ensuite, le code continuera à s'exécuter $this->linkID = $this->connect();, c'est-à-dire que le commentaire donne un indice sur la base de données unique par défaut.

Dans cette méthode, l'endroit où la capture d'écran de Kaka est prise sera jugé comme prenant en charge plusieurs connexions par l'ID de connexion à la base de données.

Ensuite, le deuxième jugement obtiendra directement les informations de configuration des paramètres et le fichier de configuration de la base de données obtenus au préalable dans le constructeur de cette classe, et enfin le renverra à l'attribut config.

Analyse approfondie du modèle de requête de base de données ThinkPHP
Méthode de connexion à la base de données

Ensuite, analysez le contenu du bloc de paramètres de connexion. Le contenu de ce bloc détermine la valeur de l'index des paramètres dans les informations de configuration. Cette valeur Le fichier de configuration est un tableau vide, il renvoie donc vrai.

Le deuxième jugement indiquant s'il s'agit d'un tableau retournera également vrai.

Ainsi, cette condition de jugement est établie et l'instruction de jugement if sera exécutée.

Un petit point de connaissance ici est la connaissance de l'opérateur 与或非.

et : renvoie vrai si toutes les conditions sont vraies

ou : renvoie vrai tant qu'une condition est vraie

Analyse approfondie du modèle de requête de base de données ThinkPHP
Paramètres de connexion

Les propriétés de ce type dans l'image ci-dessus params ont été déclarées à l'avance Ici, vous n'avez besoin de ces paramètres que lorsque pdo se connecte à mysql. .

PDOAnalyse approfondie du modèle de requête de base de données ThinkPHP
Paramètres de connexion PDO

Afin de faciliter votre compréhension, Kaka a imprimé ce paramètre pour tout le monde, veuillez consulter l'image ci-dessous.

PDOAnalyse approfondie du modèle de requête de base de données ThinkPHP
Paramètres de connexion PDO

En d'autres termes, les paramètres pdo ne sont en fait qu'une série de constantes déclarées.

L'étape suivante consiste à se connecter à la base de données à l'aide de pdo et à renvoyer les informations de connexion à $this->linkID, jusqu'à ce que la connexion à la base de données soit initialisée ici.

Analyse approfondie du modèle de requête de base de données ThinkPHP
Utilisez pdo pour vous connecter à la base de données

Ensuite, il sera exécuté en utilisant l'instance d'opération de PDoexecuteCette méthode est une méthode intégrée qui renvoie ou affecte finalement le nombre d'enregistrements.

4. Résumé

Cette section commence par comprendre les fichiers requis par le modèle, puis ajoute le comportement à le modèle. Comportement d’analyse approfondie du code source.

Dans le processus d'analyse du code source, certaines parties n'ont pas été entièrement expliquées, mais les parties clés ont été passées en revue.

Enfin, la méthode execute est analysée en profondeur Pourquoi devrions-nous analyser cette méthode Parce que cette méthode est la dernière étape dans l'exécution de toutes les opérations.

«

La persévérance dans l'apprentissage, la persévérance dans les blogs et la persévérance dans le partage sont les convictions auxquelles Kaka a toujours adhéré depuis sa carrière. J'espère que les articles de Kaka dans l'immense Internet. Je peux vous apporter un peu d'aide Silk. Je m'appelle Kaka, à la prochaine fois.

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