Une brève analyse du principe d'écriture de la chaîne d'opérations SQL dans divers frameworks tels que ThinkPHP

韦小宝
Libérer: 2023-03-20 09:12:01
original
1907 Les gens l'ont consulté

Le fonctionnement de la chaîne semble mystérieux pour beaucoup de gens. En fait, après avoir lu cet article, vous comprendrez progressivement le fonctionnement de la chaîne. Nous approfondissons le cœur de ThinkPHP et étudions les opérations en chaîne de ThinkPHP et d’autres frameworks. Tant que vous savez une chose, vous saurez tout le reste.

ThinkPHP, avec une communauté très forte, un manuel chinois pratique et détaillé. Une chose que je pense que tout le monde connaît est sa méthode d'écriture en chaîne. La méthode d'écriture en chaîne simplifie dans une certaine mesure la charge de travail SQL. OK, comment est-il implémenté ? Commençons par l'orientation objet et analysons le principe d'implémentation de l'écriture en chaîne.

La déclaration suivante :

$User->limit(10)->where('status=1')->select();
Copier après la connexion
Copier après la connexion

Code :

Nous savons que les méthodes orientées objet peuvent renvoyer plusieurs types de données. l'objet lui-même peut être renvoyé, nous pouvons donc utiliser cette fonctionnalité pour implémenter

<?php
class Test{  
  private $var = "";
  public function Func(){
        $this->var = "Var is change";
        return $this;
    }}    
    $obj = new Test();
    var_dump($obj);
Copier après la connexion
 var_dump($obj->Func());
Copier après la connexion

Le résultat imprimé :

object(Test)[1]
Copier après la connexion
 private &#39;var&#39; => string &#39;&#39;
Copier après la connexion
(length=0)object(Test)[1]
Copier après la connexion
private &#39;var&#39; => string &#39;Var is change&#39;
Copier après la connexion
 (length=13)
Copier après la connexion

Ce n'est pas difficile à trouver : notre variable privée $var a changé. En d'autres termes, notre $obj->Func(), après exécution, renvoie un objet avec $var = "Var is change".

$User->limit(10)->where(&#39;status=1&#39;)->select();
Copier après la connexion
Copier après la connexion

Alors cette affirmation n'est pas difficile à comprendre. Une fois la méthode exécutée, l’objet est transmis à la méthode suivante, et ainsi de suite.

Implémentation simple de Select()

<?php   
 class UserModel{
        private $field     ="*"; 
        private $tableName ="";
        private $where     ="";
        private $order     ="";
        private $limit     ="";
        function field($field){
            $this->field = $field;
            return $this;
        } 
       function table($tableName){
            $this->table = $tableName;
            return $this;
        } 
       function order($order){
            $this->order = "ORDER BY ".$order;
            return $this;
        }
        function where($where){
            $this->where = "WHERE ".$where;
            return $this;
        }
        function limit($index, $limit = 0){ 
           $this->limit = "LIMIT ".$index; 
           if($limit){ 
               $this->limit.= ",{$limit}";
            }
            return $this;
        }        
       function select(){
            if(empty($this->tableName)){
                $this->tableName = str_replace("Model", "", __CLASS__);//如果表名不指定,则获取类名
            }
            $selectSql ="SELECT {$this->field} 
                FROM `{$this->tableName}` 
                         {$this->where} 
                         {$this->order} 
                         {$this->limit}"
                         FROM `{$this->tableName}` 
                         {$this->where} 
                         {$this->order} 
                         {$this->limit}";
             //构造SQL语句模版串
            echo $selectSql;
            //return mysql_query($selectSql);  执行拼接后的SQL语句
        }
    }    
     $user = new UserModel();
     $user->where("`user` = 1")->order("`user` DESC")->limit(5)->select();
?>
Copier après la connexion

Résumé

L'idée est probablement d'utiliser la méthode d'opération en chaîne pour attribuer des valeurs à chaque condition de l'instruction SQL, puis unifiez-le dans la dernière étape Traiter les instructions SQL. Il ne s'agit que d'une simple mise en œuvre du principe. Les étudiants intéressés peuvent juger plusieurs types de paramètres de méthode et attribuer des conditions de manière plus flexible. Par exemple, la méthode Where peut transmettre un tableau. Ensuite, vous pouvez également suivre cette idée et faire des choses comme INSERT(), UPDATE(), DELETE(), etc. Ceci n'est qu'une introduction. Si vous souhaitez en savoir plus sur l'écriture en chaîne, vous pouvez également consulter le code source de TP.

Recommandations associées :

Une classe de package pour la base de données que j'ai modifiée en fonction de DB.php en bas de ThinkPHP

Basé sur Le DB.php en bas de ThinkPHP a été modifié par moi pour encapsuler la base de données Parce que je ne sais pas comment apprendre le framework ThinkPHP, je suis allé voir moi-même ses opérations de base de données...

Explication de l'interface de partage thinkPHP WeChat JSSDK

Cet article présente principalement l'utilisation de l'interface de partage thinkPHP WeChat JSSDK et analyse l'ajustement de thinkPHP sous forme d'exemples...

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal