ホームページ > 記事 > PHPフレームワーク > Laravelソースコード解析モデル(コード)
この記事の内容は、Laravel のソースコード解析のモデル (コード) に関するものです。必要な方は参考にしていただければ幸いです。
類人猿たちに、よく食べて、よく飲んで、よく遊んでください。
単一責任開発原則に従って、laravel の開発プロセス中に、各テーブルで外部サービスと呼び出しのモデルを確立する必要があります。これと同様に
namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $table = 'users'; }
Laravelのデータ操作は2種類に分けられます
DBファサード
# Eloquent ORM
独自の特性に加えて、基本的なデータ操作は Illuminate\Database\Query\Builder
メソッドを呼び出して SQL 全体を完了することによって完了します。 Builder クラスを SQL 操作全体の基本クラスとして使用することもできます。このクラスは以下の操作メソッドをカバーします(一部のみ表示)
method |
---|
public function select($columns = ['*']) |
パブリック関数 selectSub($query, $as) |
パブリック関数 selectRaw($expression, array $bindings = []) |
パブリック関数 fromSub($query, $as) |
パブリック関数 fromRaw($expression, $bindings = []) |
## パブリック関数 addSelect ($column)
|
public function unique()
|
public function from ($ table)
|
public function join($table, $first, $operator = null, $second = null, $type = 'inner', $ where = false)
|
パブリック関数 joinWhere($table, $first, $operator, $second, $type = 'inner')
|
パブリック関数 joinSub($query, $as, $first, $operator = null, $second = null, $type = 'inner', $where = false)
|
|
|
|
|
|
|
DB::table('user')->get();
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() メソッドを処理してから、Illuminate\Database\ を介して Illuminate\Database\ をポイントします。 table() メソッド Query クラスについては、最初に説明したのでここでは詳しく説明しません。次に、さまざまな SQL の結合 -> SQL の実行 -> 戦闘の終了
##Eloquent ORMEloquent ORM は DB ファサードに似ています。まず、各 Eloquent ORM は親クラス Illuminate\Database\Eloquent\ を継承する必要があります。モデル
おそらく次のように書くでしょう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()に到達します。 \Database\Eloquent\Builder ファイルを照らすこのクラスは、検索、findOrFail などの ORM の基本操作をカバーします。コード内で get メソッドを使用した場合、申し訳ありませんが、__call メソッドを介して Illuminate\Database\Query\Builder クラスにリクエストが転送されます
public function newEloquentBuilder($query) { return new Builder($query); }
データ操作全体が完了します。
以上がLaravelソースコード解析モデル(コード)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。