Heim > PHP-Framework > Laravel > Hauptteil

Wie man ORM in Laravel versteht

coldplay.xixi
Freigeben: 2020-07-08 17:12:31
nach vorne
3999 Leute haben es durchsucht

Wie man ORM in Laravel versteht

Was ist ORM

ORM,全称 Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,
这样,我们在操作具体的业务对象时,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法即可。
Nach dem Login kopieren

ORM-Implementierungsmethode

两种最常见的实现方式是 ActiveRecord 和 DataMapper (laravel 中使用的是前者)
Nach dem Login kopieren

Lassen Sie uns zunächst die beiden magischen Funktionen __call() und __callStatic() verstehen

class Test{
    //动态调用的时候 没有找到此函数 则执行__call() 方法
    public function __call($method, $parameters){
        echo 22222222222;
        return (new Rest)->$method(...$parameters);
    }

    //静态调用的时候 没有找到此函数 则执行__callStatic()方法
    public static function __callStatic($method, $parameters){
        echo 1111111111;
        return (new static)->$method(...$parameters);
    }}class Rest{
  public function foo($name , $age){
  echo 333;
  dump($name,$age);
  }}
  //先调用了__callStatic(), 在调用__call(), 然后调用 foo();
  Test::foo('张三',17);  
  //只调用了 __call(), 然后调用 foo();
  (new Test())->foo('李四',16);die;
Nach dem Login kopieren

Nachdem wir die beiden vorherigen magischen Funktionen verstanden haben, werden wir die Schwierigkeiten in Laravel Eloqument ORM verstehen. Schauen wir uns den Quellcode an im Modell

/**
 * Handle dynamic method calls into the model. * * @param string $method
  * @param array $parameters
  * @return mixed
 */public function __call($method, $parameters){
 if (in_array($method, ['increment', 'decrement'])) {
      return $this->$method(...$parameters);
  }
  return $this->newQuery()->$method(...$parameters);}
  /**
 * Handle dynamic static method calls into the method. * * @param string $method
  * @param array $parameters
  * @return mixed
 */public static function __callStatic($method, $parameters)
 {
 return (new static)->$method(...$parameters);
 }
Nach dem Login kopieren

new static gibt die Instanz des Aufrufers zurück, new self() gibt seine eigene Instanz zurück
Bei Verwendung von Eloqument zur Abfrage

$list = Politician::where('party_id', 1)->count();
Nach dem Login kopieren

wobei sich die Methode nicht im Modell befindet Die callStatic () wird zuerst ausgeführt, um die AppModelsPolitician-Instanz zu erhalten, dann wird call() ausgeführt und Methoden wie where() count() usw. werden in der von $this->newQuery() zurückgegebenen Instanz gefunden.
Sehen Sie sich die von der newQuery()-Methode zurückgegebene Instanz genauer an. Nachdem wir diese beiden magischen Funktionen verstanden haben, ist die Schwierigkeit, ORM in Laravel zu implementieren, überwunden.

Der Abfragekonstruktor in Laravel

$list = DB::table('categoty')->get();
Nach dem Login kopieren

Eloquent ORM kapselt tatsächlich die Abfragekonstruktion und erleichtert so die Bedienung. Wenn Sie sich für den Quellcode des Abfragekonstruktors interessieren, können Sie einen Blick darauf werfen, danke.

Verwandte Lernempfehlungen: Laravel

Das obige ist der detaillierte Inhalt vonWie man ORM in Laravel versteht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:learnku.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