Laravel 프레임 워 크 소스 분석 모델 모델 원리 와 용법 분석
머리말
원숭이 들 의 국경일 을 미리 축하 하고 맛 있 게 먹고 잘 놀 며 나 는 텔레비전 에서 너희들 을 볼 것 이다.
단일 책임 개발 원칙 에 따라 laravel 의 개발 과정 에서 모든 표 는 model 대외 서비스 와 호출 을 구축 해 야 한다.이와 유사 하 다
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $table = 'users';
}
해석 하 다.Laravel 의 데이터 조작 은 두 가지 로 나 뉜 다.
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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
단순 Laravel+Vue.js에서 VueUI를 사용하여 로그인 및 등록Laravel에는 웹 팩과 같은 Laravel-Mix가 있는데, 이를 이용해서 Laravel에 Vue.js를 실현할 수 있다. 이번에는 몇 가지 명령을 통해 간단하게 VueUI로 로그인하여 로그인을 할 수 있습니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.