Heim > PHP-Framework > Laravel > Laravel-Quellcode-Analysemodell (Code)

Laravel-Quellcode-Analysemodell (Code)

不言
Freigeben: 2018-09-30 15:35:21
nach vorne
4443 Leute haben es durchsucht

Der Inhalt dieses Artikels befasst sich mit dem Modell (Code) der Laravel-Quellcode-Analyse. Ich hoffe, dass er für Sie hilfreich ist.

Vorwort

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';
}
Nach dem Login kopieren

Parsing

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.

DB-Fassade

Normalerweise schreiben Sie eine Operation wie diese

DB::table('user')->get();
Nach dem Login kopieren

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()
Nach dem Login kopieren

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],
            ....
        )
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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

Laravel-Quellcode-Analysemodell (Code)

Eloquent ORM

Eloquent ORM ähnelt der DB-Fassade. Zuerst muss jedes Eloquent ORM die übergeordnete Klasse IlluminateDatabaseEloquentModel erben
Sie werden wahrscheinlich so schreiben

User::find(1)
Nach dem Login kopieren

Diese Methode ist in der übergeordneten Klasse nicht vorhanden, sie wird

public static function __callStatic($method, $parameters)
{
    return (new static)->$method(...$parameters);
}
Nach dem Login kopieren

verwenden, um den Anforderungsaufruf weiterzuleiten. Auf die gleiche Weise wird

User::get()
Nach dem Login kopieren

über

public function __call($method, $parameters)
{
    if (in_array($method, ['increment', 'decrement'])) {
        return $this->$method(...$parameters);
    }
        
    return $this->newQuery()->$method(...$parameters);
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage