Maison > cadre php > Laravel > le corps du texte

Comment comprendre ORM dans Laravel

coldplay.xixi
Libérer: 2020-07-08 17:12:31
avant
4003 Les gens l'ont consulté

Comment comprendre ORM dans Laravel

Qu'est-ce que ORM

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

Méthode de mise en œuvre d'ORM

两种最常见的实现方式是 ActiveRecord 和 DataMapper (laravel 中使用的是前者)
Copier après la connexion

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;
Copier après la connexion

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);
 }
Copier après la connexion

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();
Copier après la connexion

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();
Copier après la connexion

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!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal