什么是 Laravel Eloquent Eager Loading?
一、什么是 Laravel Eloquent Eager Loading
Laravel Eloquent Eager Loading 是一種優化數據庫查詢的方法,可以避免在一個循環中多次查詢數據庫而導致的性能問題。
當需要獲取一個模型及其關聯模型的數據時,如果使用常規的查詢方法,每個關聯模型都會獨立執行一條數據庫查詢,從而導致數據庫查詢次數的增加和潛在的性能問題。而使用 Eager Loading,則可以預先加載關聯數據,減少數據庫查詢次數,提高性能。
它的核心是Eager Loading,它告訴Eloquent你想要抓取一個具有特定關系的模型,這樣框架就會產生一個更高效的查詢來抓取你需要的所有數據。通過快速加載,您可以將許多查詢減少到一個或兩個。
二、Eloquent 模型約定
現在,我們來看一個 Flight 模型的示例,我們將用它從 flights 數據庫表中檢索和存儲數據信息:
1、數據表名稱
請注意,我們并沒有告訴 Eloquent 我們的 Flight 模型使用哪個數據表。 除非明確地指定了其它名稱,否則將使用類的復數形式「蛇形命名」來作為表名。因此,在這種情況下,Eloquent 將假設 Flight 模型存儲的是 flights 數據表中的數據,而 AirTrafficController 模型會將記錄存儲在 air_traffic_controllers 表中。
你可以通過在模型上定義 table 屬性來指定自定義數據表:
2、主鍵
Eloquent 也會假設每個數據表都有一個名為 id 的主鍵列。你可以定義一個受保護的 $primaryKey 屬性來重寫約定。
此外,Eloquent 假設主鍵是一個自增的整數值,這意味著默認情況下主鍵會自動轉換為 int 類型。如果您希望使用非遞增或非數字的主鍵則需要設置公共的 $incrementing 屬性設置為 false:
如果你的主鍵不是一個整數,你需要將模型上受保護的 $keyType 屬性設置為 string:
3、時間戳
默認情況下,Eloquent 預期你的數據表中存在 created_at 和 updated_at 兩個字段 。如果你不想讓 Eloquent 自動管理這兩個列, 請將模型中的 $timestamps 屬性設置為 false:
如果需要自定義時間戳的格式,在你的模型中設置 $dateFormat 屬性。這個屬性決定日期屬性在數據庫的存儲方式,以及模型序列化為數組或者 JSON 的格式:
如果你需要自定義存儲時間戳的字段名,可以在模型中設置 CREATED_AT 和 UPDATED_AT 常量的值來實現:
4、數據庫連接
默認情況下,Eloquent 模型將使用你的應用程序配置的默認數據庫連接。如果你想為模型指定一個不同的連接,設置 $connection 屬性即可:
延伸閱讀1:Laravel 的 Eloquent ORM 是什么
Laravel 的 Eloquent ORM 提供了一個漂亮、簡潔的 ActiveRecord 實現來和數據庫交互。每個數據庫表都有一個對應的「模型」用來與該表交互。你可以通過模型查詢數據表中的數據,以及在數據表中插入新記錄。

猜你喜歡LIKE
相關推薦HOT
更多>>
redis怎么實現數據庫類似rank并列排名?
一、redis實現數據庫類似rank并列排名的方法Sorted Set是一個有序的集合,其中的每個成員都會被賦予一個分數(score),通過對分數的操作可以實...詳情>>
2023-10-15 17:23:44
Oracle怎么修改某個字段特定位置的字符?
一、Oracle修改某個字段特定位置的字符的方法1、查找需要修改的記錄“查找需要修改的記錄是指在數據庫中定位需要進行修改的數據行。在進行數據...詳情>>
2023-10-15 16:30:30
騰訊星圖(Star Knowledge Graph)是什么樣的數據庫?
一、騰訊星圖(Star Knowledge Graph)是什么樣的數據庫騰訊星圖(Star Knowledge Graph,即SKG,也稱知識圖譜),是一個圖數據庫和圖計算引擎...詳情>>
2023-10-15 16:06:16
Python線程為什么搞個setDaemon?
一、Python線程為什么搞個setDaemon當啟動一個線程時設置thread.setDaemon(True),則該線程為守護線程(也可以稱為后臺線程)。表示該線程是不...詳情>>
2023-10-15 10:34:46熱門推薦
MYSQL 查詢庫存結存數量語句怎么寫?
沸VUE使用什么連接并搭建搭建本地數據庫?
熱超級APP系統比市場APP系統有哪些亮點呢?
熱哪些平臺支持Python編程?
新mysql有排他鎖為什么還需要共享鎖呢?
為什么搜索引擎在磁盤上的索引不能做到實時添加而數據庫可以?
設置數據庫的字符集和設置表字段字符集的區別是什么?
windows版oracle為什么老是卸載不干凈?
redis怎么實現數據庫類似rank并列排名?
sql server2000導出CSV文件用EXCEL數據格式出錯怎么處理?
Oracle怎么修改某個字段特定位置的字符?
Django項目中如何配置MySQL數據庫?
騰訊星圖(Star Knowledge Graph)是什么樣的數據庫?
MySQL分表后怎么查詢效率高?
技術干貨






