Maison  >  Article  >  cadre php  >  Comment comprendre ORM dans Laravel

Comment comprendre ORM dans Laravel

coldplay.xixi
coldplay.xixiavant
2020-07-08 17:12:313969parcourir

Comment comprendre ORM dans Laravel

Qu'est-ce que ORM

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

Méthode de mise en œuvre d'ORM

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

Commençons par comprendre les deux fonctions magiques __call() et __callStatic()

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;

Après avoir compris les deux fonctions magiques précédentes, nous comprendrons les difficultés de laravel Eloqument ORM. dans Model

/**
 * 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);
 }

new static renvoie l'instance de l'appelant, new self() renvoie sa propre instance
Lors de l'utilisation de l'éloquence pour interroger

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

où la méthode n'est pas dans le modèle Le callStatic () sera exécutée en premier pour obtenir l'instance AppModelsPolitician, puis call() sera exécuté et des méthodes telles quewhere() count() etc. seront trouvées dans l'instance renvoyée par $this->newQuery().
Examinez de plus près l'instance renvoyée par la méthode newQuery(). Après avoir compris ces deux fonctions magiques, la difficulté d'implémenter ORM dans Laravel a été surmontée.

Le constructeur de requêtes dans laravel

$list = DB::table('categoty')->get();

Eloquent ORM encapsule en fait la construction de la requête, ce qui la rend plus facile à utiliser. Si vous êtes intéressé par le code source du constructeur de requêtes, vous pouvez y jeter un œil, merci.

Recommandations d'apprentissage associées : Laravel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer