ThinkPHP 등 다양한 프레임워크에서 작성하는 SQL 연산 체인의 원리에 대한 간략한 분석

韦小宝
풀어 주다: 2023-03-20 09:12:01
원래의
1907명이 탐색했습니다.

체인 운영은 많은 사람들에게 신비해 보입니다. 사실 이 글을 읽고 나면 체인 운영을 점차 이해하게 될 것입니다. ThinkPHP의 핵심을 깊이 파고들어 ThinkPHP 및 기타 프레임워크의 체인 작동을 연구합니다. 한 가지만 알면 다른 것도 모두 알 수 있습니다.

ThinkPHP는 매우 강력한 커뮤니티와 실용적이고 자세한 중국어 설명서를 갖추고 있습니다. 모두가 익숙하다고 생각하는 것 중 하나는 그의 체인 쓰기 방법입니다. 체인 쓰기 방법은 SQL 작업 부하를 어느 정도 단순화합니다. 자, 어떻게 구현되나요? 객체 지향부터 시작하여 체인 작성의 구현 원리를 분석해 보겠습니다.

다음 문:

$User->limit(10)->where('status=1')->select();
로그인 후 복사
로그인 후 복사

코드:

객체 지향 메서드가 여러 데이터 유형을 반환할 수 있다는 것을 알고 있습니다. 물론 객체 자체도 반환할 수 있으므로 이 기능을 사용하여

<?php
class Test{  
  private $var = "";
  public function Func(){
        $this->var = "Var is change";
        return $this;
    }}    
    $obj = new Test();
    var_dump($obj);
로그인 후 복사
 var_dump($obj->Func());
로그인 후 복사

를 구현할 수 있습니다. 인쇄 결과가 나옵니다:

object(Test)[1]
로그인 후 복사
 private &#39;var&#39; => string &#39;&#39;
로그인 후 복사
(length=0)object(Test)[1]
로그인 후 복사
private &#39;var&#39; => string &#39;Var is change&#39;
로그인 후 복사
 (length=13)
로그인 후 복사

찾기는 어렵지 않습니다: 개인 변수 $var가 변경되었습니다. 즉, $obj->Func()는 실행 후 $var = "Var is Change"인 개체를 반환합니다.

$User->limit(10)->where(&#39;status=1&#39;)->select();
로그인 후 복사
로그인 후 복사

그렇다면 이 말은 이해하기 어렵지 않습니다. 메서드가 실행된 후 개체는 다음 메서드로 전달됩니다.

Simple 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();
?>
로그인 후 복사

Summary

연쇄 연산 방식을 통해 SQL 문의 다양한 조건에 값을 할당한 후 마지막 단계에서 SQL 문을 균일하게 처리하는 아이디어입니다. 이는 원리를 간단히 구현한 것에 불과합니다. 관심 있는 학생들은 다양한 유형의 방법 매개변수를 판단하고 조건을 보다 유연하게 할당할 수 있습니다. 예를 들어 where 메소드는 배열을 전달할 수 있습니다. 그런 다음 이 아이디어를 따라 INSERT(), UPDATE(), DELETE() 등과 같은 작업을 수행할 수도 있습니다. 이것은 단지 소개일 뿐입니다. 체인 쓰기에 대해 더 자세히 알고 싶다면 TP 소스 코드를 살펴보세요.

관련 추천 :

ThinkPHP 하단의 DB.php 기반 데이터베이스 캡슐화 클래스를 수정했습니다

ThinkPHP를 배웠기 때문에 ThinkPHP 하단의 DB.php 기반 데이터베이스 캡슐화 클래스를 수정했습니다. Framework, 아니, 데이터베이스 운영을 직접 보러 갔습니다...

thinkPHP WeChat 공유 인터페이스 JSSDK 예제에 대한 설명

이 글에서는 주로 thinkPHP WeChat 공유 인터페이스 JSSDK 사용법을 소개하고, thinkPHP 튜닝 형식을 분석합니다. ..

위 내용은 ThinkPHP 등 다양한 프레임워크에서 작성하는 SQL 연산 체인의 원리에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿