Laravel 프레임 워 크 소스 분석 모델 모델 원리 와 용법 분석

5694 단어 Laravel모델 모델
본 논문 의 사례 는 Laravel 프레임 워 크 소스 코드 분석 모델 모델 의 원리 와 용법 을 서술 했다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
머리말
원숭이 들 의 국경일 을 미리 축하 하고 맛 있 게 먹고 잘 놀 며 나 는 텔레비전 에서 너희들 을 볼 것 이다.
단일 책임 개발 원칙 에 따라 laravel 의 개발 과정 에서 모든 표 는 model 대외 서비스 와 호출 을 구축 해 야 한다.이와 유사 하 다

namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
 
class User extends Model
{
 protected $table = 'users';
}
해석 하 다.
Laravel 의 데이터 조작 은 두 가지 로 나 뉜 다.
  • DB facade
  • Eloquent ORM
  • 이들 은 각자 의 특색 을 제외 하고 기본 적 인 데이터 조작 은 모두Illuminate\Database\Query\Builder 호출 방법 을 통 해 전체 SQL 을 완성 한다.너 도 Builder 라 는 종 류 를 전체 SQL 작업 의 기본 클래스 로 도 울 수 있다.이 종 류 는 다음 과 같은 조작 방법(부분 전시)을 포함한다.
    방법.public function select($columns = ['*']) public function selectSub($query, $as) public function selectRaw($expression, array $bindings = []) public function fromSub($query, $as) public function fromRaw($expression, $bindings = []) public function addSelect($column) public function distinct() public function from($table) public function join($table, $first, $operator = null, $second = null, $type = 'inner', $where = false) public function joinWhere($table, $first, $operator, $second, $type = 'inner') public function joinSub($query, $as, $first, $operator = null, $second = null, $type = 'inner', $where = false) public function leftJoin($table, $first, $operator = null, $second = null) public function where($column, $operator = null, $value = null, $boolean = 'and') public function orWhere($column, $operator = null, $value = null) public function whereRaw($sql, $bindings = [], $boolean = 'and') public function whereIn($column, $values, $boolean = 'and', $not = false) public function orWhereIn($column, $values) 이 를 통 해 알 수 있 듯 이 중국 laravel 역 이나 공식 문서 에 나타 나 지 않 은 방법 이 많 기 때문에 하나의 프레임 워 크 에 정통 하 더 라 도 소스 코드 를 보지 않 으 면 안 된다.이 파일 은 프로젝트 디 렉 터 리 에 있 는vendor/laravel/framework/src/Illuminate/Database/Query 아래 에서 직접 볼 수 있 습 니 다.
    DB facade
    정상 적 인 상황 에서 당신 은 이렇게 조작 을 쓸 수 있 습 니 다.
    
    DB::table('user')->get();
    이 동작 은 먼저 laravel 의 외관 을 통 해 파일 을 가리 키 지만 app.php 에 있 지 않 고 커 널 을 통 해 직접 불 러 옵 니 다.
    
    Illuminate\Foundation\Application -> registerCoreContainerAliases()
    등록 을 당 하 다.외관 직접 호출Illuminate\Database\DatabaseManager 류.
    
    public function registerCoreContainerAliases()
    {
      foreach ([
       ...
       'encrypter'   => [\Illuminate\Encryption\Encrypter::class, \Illuminate\Contracts\Encryption\Encrypter::class],
       'db'     => [\Illuminate\Database\DatabaseManager::class],
       'db.connection'  => [\Illuminate\Database\Connection::class, \Illuminate\Database\ConnectionInterface::class],
       'events'    => [\Illuminate\Events\Dispatcher::class, \Illuminate\Contracts\Events\Dispatcher::class],
       'files'    => [\Illuminate\Filesystem\Filesystem::class],
       ....
      )
    }
    Illuminate\Database\DatabaseManager 안에 코드 가 많 지 않 고 대부분 데이터베이스 링크 를 처리 합 니 다.사용DB::table()시 통과
    
    public function __call($method, $parameters)
    {
     return $this->connection()->$method(...$parameters);
    }
    리 트 윗,호출 된 것 은Illuminate\Database\Connection ,사용자 처리table() 방법 입 니 다.그 다음 에table() 방법 으로Illuminate\Database\Query 류 를 가리 킬 것 입 니 다.처음에 우 리 는 이런 종 류 를 말 했 습 니 다.여 기 는 더 이상 말 하지 않 겠 습 니 다.그 다음 에 각종 sql 의 연결->sql 집행->전 투 를 끝 냅 니 다.

    Eloquent ORM
    Eloquent ORM 은 DB facade 와 유사 합 니 다.우선 모든 Eloquent ORM 은 부모 클래스Illuminate\Database\Eloquent\Model 를 계승 해 야 합 니 다.
    너 는 아마 이렇게 쓸 것 이다.
    
    User::find(1)
    부 류 는 이 방법 이 존재 하지 않 습 니 다.통과 할 것 입 니 다.
    
    public static function __callStatic($method, $parameters)
    {
     return (new static)->$method(...$parameters);
    }
    호출 요청 을 전달 하 다.같은 이치
    
    User::get()
    통과 하 다
    
    public function __call($method, $parameters)
    {
     if (in_array($method, ['increment', 'decrement'])) {
      return $this->$method(...$parameters);
     }
      
     return $this->newQuery()->$method(...$parameters);
    }
    호출 하 라.이 방법 은 결국new Builder() 으로 끝났다.
    
    public function newEloquentBuilder($query)
    {
     return new Builder($query);
    }
    마지막 으로 우 리 는Illuminate\Database\Eloquent\Builder 파일 에 도 착 했 습 니 다.이 클래스 는 ORM 의 기본 동작,예 를 들 어 find,find OrFail 등 을 포함 합 니 다.만약 당신 이 코드 에 get 방법 을 사용 했다 면,죄송합니다.여 기 는 없습니다.그것 은 여전히 을 통과 할 것 입 니 다.call 방법 은 당신 의 요청 을Illuminate\Database\Query\Builder 클래스 에 전달 합 니 다.
    
    $this->query->{$method}(...$parameters);
    이로써 전체 데이터 조작 이 완료 되 었 다.

    더 많은 Laravel 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.,,,,,Laravel 프레임 워 크 입문 및 진급 튜 토리 얼
    본 고 는 Laravel 프레임 워 크 를 바탕 으로 하 는 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기