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