摘要:原文發表在我的個人網站深入理解二中間操作流本篇教程是該系列教材的第二篇,將主要講述中中間操作流的概念。復雜用法示例下一步深入理解三模型間關系關聯
本篇教程是該系列教材的第二篇,將主要講述 Eloquent 中中間操作流的概念。中間操作流是我自己總結并翻譯的概念,支撐該功能的類位于 IlluminateDatabaseEloquentBuilder,此概念對于新手入門有很大幫助,但是官方文檔沒有相關概念和解釋。
什么是“中間操作流”(Builder)Builder 這個單詞可以直譯成構造器,但是“中間操作流”更容易理解,因為數據庫操作大部分時候都是鏈式操作的。
中間操作流,請看代碼:
phpArticle::where("id", ">", 10)->where("id", "<", 20)->orderBy("updated_at", "desc")->get();
這段代碼的 ::where()->where()->orderBy() 就是中間操作流。中間操作流用面向對象的方法來理解,可以總結成一句話:
創建一個對象,并不斷修改它的屬性,最后用一個操作來觸發數據庫操作。
但是,我們都知道,如果直接用 :: 來訪問某個 function,無論這個 function 是否為 static,構造函數 __construct() 都不會被調用,那么創建對象是如何實現的呢?請看:https://github.com/illuminate/database/blob/master/Eloquent/Model.php#L3354
如何找到中間操作流的蛛絲馬跡中間操作流這個東西,文檔里幾乎沒有任何有價值的信息,那么,我們該怎么找出這個玩意兒呢?很簡單,使用以下代碼:
php$builder = Article::where("title", "我是標題")->title;
然后你就會看到下面的錯誤:
為什么會出現錯誤?因為 Article::where() 了之后依然是 Builder 對象,還不是 Article 對象,不能直接取 title。
“終結者”方法所謂 “終結者” 方法,指的是在 N 個中間操作流方法對某個 Eloquent 對象進行加工以后,觸發最終的數據庫查詢操作,得到返回值。
first() get() paginate() count() delete() 是用的比較多的一些 “終結者” 方法,他們會在中間操作流的最后出現,把 SQL 打給數據庫,得到返回數據,經過加工返回一個 Article 對象或者一群 Article 對象的集合。
復雜用法示例phpArticle::where("id", ">", "100")->where("id", "<", "200")->orWhere("top", 1)->belongsToCategory()->where("category_level", ">", "1")->paginate(10);
下一步:深入理解 Laravel Eloquent(三)——模型間關系(關聯)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31911.html
摘要:為關聯關系設置約束子模型的等于父模型的上面設置的字段的值子類實現這個抽象方法通過上面代碼看到創建實例時主要是做了一些配置相關的操作,設置了子模型父模型兩個模型的關聯字段和關聯的約束。不過當查詢父模型時,可以預加載關聯數據。 Database 模型關聯 上篇文章我們主要講了Eloquent Model關于基礎的CRUD方法的實現,Eloquent Model中除了基礎的CRUD外還有一個...
摘要:是什么是一個,全稱為,翻譯為對象關系映射如果只把它當成數組庫抽象層那就太小看它了。所謂對象,就是本文所說的模型對象關系映射,即為模型間關系。至此,深入理解系列文章到此結束。 原文發表在我的個人網站:深入理解 Laravel Eloquent(三)——模型間關系(關聯) 在本篇文章中,我將跟大家一起學習 Eloquent 中最復雜也是最難理解的部分——模型間關系。官方英文文檔中...
摘要:原文發表在我的個人網站深入理解一基本概念及用法在本系列文章中,我將跟大家一起學習的基本用法,探索的各種高級功能,理解背后的運行原理,并最終達到深入理解靈活使用的目的。下一步深入理解二中間操作流 原文發表在我的個人網站:深入理解 Laravel Eloquent(一)——基本概念及用法 在本系列文章中,我將跟大家一起學習 Eloquent 的基本用法,探索 Eloquent 的各種...
摘要:,看下源碼返回很容易知道返回值是,然后將該值存儲在變量中,這時。看下的源碼去除掉字符后為返回從源碼中可知道返回值為,這時。 說明:本文主要學習下Query Builder編譯Fluent Api為SQL的細節和執行SQL的過程。實際上,上一篇聊到了IlluminateDatabaseQueryBuilder這個非常重要的類,這個類含有三個主要的武器:MySqlConnection, M...
摘要:看起來是一個簡單的機制,但是在底層,有很多半隱藏的函數和鮮為人知的方式來實現更多功能。在這篇文章中,我將演示幾個小技巧。另外,在里也有些和時間相關的預定義方法通過關系排序一個復雜一點的技巧。幸運的是,確實有這樣的方法。 showImg(https://segmentfault.com/img/bV8L5s?w=1240&h=634); Eloquent ORM 看起來是一個簡單的機制,...
閱讀 2293·2021-11-24 09:39
閱讀 2535·2021-11-22 15:24
閱讀 2975·2021-09-02 09:48
閱讀 3009·2021-07-26 22:01
閱讀 1433·2019-08-30 11:09
閱讀 1672·2019-08-29 18:47
閱讀 600·2019-08-29 15:40
閱讀 2131·2019-08-29 15:22