Heim > Artikel > PHP-Framework > Laravel-Quellcode-Analysemodell (Code)
Der Inhalt dieses Artikels befasst sich mit dem Modell (Code) der Laravel-Quellcode-Analyse. Ich hoffe, dass er für Sie hilfreich ist.
Ich wünsche den Affen im Voraus einen schönen Nationalfeiertag. Essen Sie gut, trinken Sie gut und haben Sie Spaß.
Gemäß dem Single-Responsibility-Entwicklungsprinzip sollte während des Entwicklungsprozesses von Laravel jede Tabelle ein Modell für externe Dienste und Anrufe erstellen. Ähnlich
namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $table = 'users'; }
Laravels Datenoperationen sind in zwei Typen unterteilt
DB-Fassade
Eloquentes ORM
Zusätzlich zu ihren eigenen Eigenschaften werden grundlegende Datenoperationen durch IlluminateDatabaseQueryBuilder
Aufrufmethoden abgeschlossen, um das gesamte SQL zu vervollständigen. Sie können die Builder-Klasse auch als Basisklasse für die gesamte SQL-Operation verwenden. Dieser Kurs behandelt die folgenden Betriebsmethoden (teilweise Anzeige)
方法 |
---|
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) |
Es ist ersichtlich, dass es viele Methoden gibt, die nicht auf der chinesischen Laravel-Website oder in offiziellen Dokumenten widergespiegelt sind, also selbst wenn Sie kompetent sein möchten In einem Framework lesen Sie es nicht. Der Quellcode funktioniert auch nicht. Diese Datei befindet sich unter „vendor/laravel/framework/src/Illuminate/Database/Query“ in Ihrem Projektverzeichnis. Sie können sie selbst überprüfen.
Normalerweise schreiben Sie eine Operation wie diese
DB::table('user')->get();
Diese Operation verweist zunächst über die Fassade von Laravel auf die Datei, sie befindet sich jedoch nicht in app.php , es wird direkt über den Kernel geladen und in
Illuminate\Foundation\Application -> registerCoreContainerAliases()
registriert. Die Fassade ruft direkt die IlluminateDatabaseDatabaseManager-Klasse auf.
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], .... ) }
IlluminateDatabaseDatabaseManager Es ist nicht viel Code darin, der größte Teil davon kümmert sich um Datenbankverbindungen. Wenn Sie DB::table() verwenden, wird es über
public function __call($method, $parameters) { return $this->connection()->$method(...$parameters); }
weitergeleitet. Der Benutzer verarbeitet die table()-Methode und zeigt dann über table() auf die IlluminateDatabaseQuery-Klasse. Methode. Wir haben am Anfang darüber gesprochen, ich werde hier nicht auf Details eingehen, und dann ist da noch das Zusammenfügen verschiedener SQL->Execute SQL->End the Battle
Eloquent ORM ähnelt der DB-Fassade. Zuerst muss jedes Eloquent ORM die übergeordnete Klasse IlluminateDatabaseEloquentModel erben
Sie werden wahrscheinlich so schreiben
User::find(1)
Diese Methode ist in der übergeordneten Klasse nicht vorhanden, sie wird
public static function __callStatic($method, $parameters) { return (new static)->$method(...$parameters); }
verwenden, um den Anforderungsaufruf weiterzuleiten. Auf die gleiche Weise wird
User::get()
über
public function __call($method, $parameters) { if (in_array($method, ['increment', 'decrement'])) { return $this->$method(...$parameters); } return $this->newQuery()->$method(...$parameters); }
aufgerufen. Schließlich gelangen wir zur IlluminateDatabaseEloquentBuilder-Datei Verstehen Sie die grundlegenden Operationen von ORM, z. B. find, findOrFail usw. Wenn Sie die get-Methode in Ihrem Code verwenden, leider nicht hier, wird Ihre Anfrage trotzdem über die __call-Methode an die IlluminateDatabaseQueryBuilder-Klasse weitergeleitet. new Builder()
public function newEloquentBuilder($query) { return new Builder($query); }Damit ist der gesamte Datenvorgang abgeschlossen.
Das obige ist der detaillierte Inhalt vonLaravel-Quellcode-Analysemodell (Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!