站長資訊網
        最全最豐富的資訊網站

        Laravel 中如何對 ORM 實現理解

        Laravel 中如何對 ORM 實現理解

        什么叫ORM

        ORM,全稱 Object-Relational Mapping(對象關系映射),它的作用是在關系型數據庫和業務實體對象之間作一個映射, 這樣,我們在操作具體的業務對象時,就不需要再去和復雜的SQL語句打交道,只需簡單的操作對象的屬性和方法即可。

        ORM 實現方式

        兩種最常見的實現方式是 ActiveRecord 和 DataMapper (laravel 中使用的是前者)

        我們先來理解兩個魔法函數 __call() 和 __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;

        理解了前面兩個魔法函數 對于laravel Eloqument ORM 中的難點 也就理解了,我們來看一下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 返回的是調用者的實例, new self() 返回的是自身實例
        使用eloqument 查詢的時候

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

        where 方法不在 Model中 會先執行callStatic()函數 獲取 AppModelsPolitician 實例 ,再執行 call() , 在$this->newQuery() 返回實例中尋找where() count()等方法。
        細看一下 newQuery() 方法 這里面返回的實例。 理解了這兩個魔術函數 對laravel 中 orm的實現的難點就攻克了。

        laravel 中的查詢構造器

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

        Eloquent ORM 實際上是對 查詢構造進行了一次封裝,可以更方便的去操作。 查詢構造器的源碼大家有興趣的話可以看一看,謝謝。

        相關學習推薦:Laravel

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: jizz国产精品网站| www夜片内射视频日韩精品成人| 国产成人精品综合网站| 人人妻人人澡人人爽精品欧美| 久久精品九九亚洲精品天堂| 精品欧洲av无码一区二区三区 | 99re这里只有精品国产精品| 亚洲国产成人a精品不卡在线| 国产精品成人国产乱一区| 99久久久国产精品免费无卡顿| 亚洲精品乱码久久久久久蜜桃不卡 | 国产精品免费大片| 无码精品人妻一区二区三区免费看 | 亚洲欧美日韩精品| 国产偷亚洲偷欧美偷精品 | 亚洲精品无码成人片在线观看| 国产亚洲精品免费视频播放| 四虎国产精品永久一区| 久久精品国产半推半就| 国产成人精品免费视频大| 国产精品国产三级国产AV主播| 久久精品天天中文字幕人妻 | 国产高清在线精品一本大道| 欧美成人精品一区二区三区| 99久久国产综合精品麻豆| 精品国产粉嫩内射白浆内射双马尾 | 免费国产在线精品一区| 久久精品亚洲欧美日韩久久| 国产亚洲精品无码拍拍拍色欲| 精品国产91久久久久久久a | 国产高清在线精品一区二区 | 久久棈精品久久久久久噜噜| 亚洲午夜福利精品久久| 亚洲国产91精品无码专区| 亚洲国产精品成人一区| 亚洲精品99久久久久中文字幕| 亚洲国产精品一区二区三区久久 | 日产精品久久久久久久| 精品无码久久久久国产| 国产成人精品无码播放| 国产精品成人va|