Maison >cadre php >Laravel >qu'est-ce que Laravel Orm

qu'est-ce que Laravel Orm

青灯夜游
青灯夜游original
2022-02-14 15:07:243641parcourir

Dans Laravel, le nom complet d'orm est « Object-Relational Mapping », ce qui signifie « mappage objet-relationnel ». Sa fonction est de faire un mappage entre une base de données relationnelle et des objets d'entité commerciale de cette manière, lors de l'exploitation d'une entreprise ; objets, il n'y a pas besoin d'être compliqué. Pour gérer les instructions SQL, il suffit d'exploiter les propriétés et les méthodes de l'objet.

qu'est-ce que Laravel Orm

L'environnement d'exploitation de ce tutoriel : système Windows 7, version Laravel 6, ordinateur Dell G3.

Qu'est-ce que ORM

ORM, le nom complet est Object-Relational Mapping (Object-Relational Mapping). Sa fonction est de faire un mappage entre la base de données relationnelle et les objets de l'entité métier de cette manière, lorsque nous opérons des manières spécifiques. objets métier, vous n'avez plus besoin de gérer des instructions SQL complexes, il vous suffit d'exploiter les propriétés et les méthodes de l'objet.

Méthode d'implémentation ORM

Les deux méthodes d'implémentation les plus courantes sont ActiveRecord et DataMapper (le premier est utilisé dans Laravel)

  • ActiveRecord (très populaire) a une correspondance biunivoque entre le modèle et les données table,

  • Les modèles et les tableaux de données sont complètement séparés dans DataMapper.

L'ORM Eloquent de Laravel utilise l'implémentation ActiveRecord. Chaque classe de modèle Eloquent correspond à une table dans la base de données. Nous pouvons ajouter, supprimer, modifier et interroger la base de données en appelant la méthode correspondante de la classe modèle.

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 difficultés des deux premières fonctions magiques dans laravel Eloqument ORM, jetons un œil au code source 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);
}

nouveaux retours statiques l'instance de l'appelant, new self () renvoie sa propre instance

Lorsque vous utilisez eloqument pour interroger

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

où la méthode n'est pas dans le modèle, la fonction callStatic() sera d'abord exécutée pour obtenir l'instance AppModelsPolitician, puis appellera ( ) , recherchez des méthodes telles que Where () count() 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 peut être surmontée. Le constructeur de requête 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

[Recommandations associées : tutoriel vidéo 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:
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