老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設、域名注冊、服務器等服務

怎么利用預加載優(yōu)化LaravelModel查詢-創(chuàng)新互聯(lián)

這篇文章主要介紹了怎么利用預加載優(yōu)化Laravel Model查詢,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

目前創(chuàng)新互聯(lián)已為上千多家的企業(yè)提供了網(wǎng)站建設、域名、雅安服務器托管、網(wǎng)站托管、企業(yè)網(wǎng)站設計、環(huán)江網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

介紹


對象關系映射(ORM)使數(shù)據(jù)庫的工作變得非常簡單。 在以面向對象的方式定義數(shù)據(jù)庫關系時,可以輕松查詢相關的模型數(shù)據(jù),開發(fā)人員可能不會注意底層數(shù)據(jù)庫調用。

下面將通過一些例子,進一步幫助您了解如何優(yōu)化查詢。

假設您從數(shù)據(jù)庫收到了100個對象,并且每個記錄都有1個關聯(lián)模型(即belongsTo)。 默認使用ORM將產生101個查詢; 如下所示:

//獲取已發(fā)布的100條文章
$posts = Post::limit(100)->get(); //一次查詢

$authors = array_map(function($post) {
 // 對作者模型生成查詢
 return $post->author->name;
}, $posts);

我們在查詢時沒有告訴Post模型,我們還需要所有的作者,所以每次從單個Post模型實例獲取作者的名字時,都會發(fā)生單獨的查詢。

array_maps時發(fā)生100次查詢,加上先前一次查詢,累計產生101次查詢。


預加載


接下來,如果我們打算使用關聯(lián)的模型數(shù)據(jù),我們可以使用預加載將該101個查詢總數(shù)減少到2個查詢。 只需要告訴模型你需要什么來加載。如下:

//獲取已發(fā)布的100條文章 - 并預加載文章對應作者
$posts = Post::with('author')->limit(100)->get();//2次查詢

$authors = array_map(function($post) {
 // 對作者模型生成查詢
 return $post->author->name;//這里講不在產生查詢
}, $posts);

如果你開啟了sql日志,你將看到上述預加載將只會產生兩條查詢:

select * from `posts`
select * from `authors` where `authors`.`id` in (?, ?, ?, ?, ?) [1,2,3,4,5]

如果您有多個關聯(lián)模型,則可以使用數(shù)組加載它們:

$posts = App\Post::with(['author', 'comments'])->get();

接下來我們重新定義如下關系

Post -> belongsTo -> Author //每個文章只屬于一個用戶
Author -> hasMany -> Post //每個用戶擁有多個文章
Author -> hasOne -> Profile //每個用戶只有一個簡介

考慮下述情況:獲取已發(fā)布文章所屬作者的個人簡介。

//獲取所有文章 - 并預加載文章對應作者
$posts = App\Post::with('author')->get();//兩次查詢

//根據(jù)每個 `作者` 獲取其簡介
$posts->map(function ($post) {
 //雖然我們直接通過$author = $post->author不會產生查詢,
 //但當調用$author->profile時,每次都會產生一個新查詢
 return $post->author->profile;
});

假設上述App\Post::with('author')->get()有100條記錄,將會產生多少條查詢呢?


通過優(yōu)化預加載,我們可以避免嵌套關系中的額外查詢。

//獲取所有文章 - 并預加載文章對應作者及每個作者對應de profile
$posts = App\Post::with('author.profile')->get();//三次查詢

$posts->map(function ($post) {
 //不在產生新查詢
 return $post->author->profile;
});

你可以打開你的sql日志看到對應的三條查詢。

select * from `posts` 
select * from `authors` where `authors`.`id` in (?, ?, ?, ?, ?) [.....] 
select * from `profiles` where `profiles`.`author_id` in (?, ?, ?, ?, ?) [.....]

懶惰加載


有時候您可能只需要根據(jù)條件收集相關聯(lián)的模型。 在這種情況下,您可以懶惰地調用相關數(shù)據(jù)的其他查詢:

$posts = App\Post::all();//一次查詢

$posts->load('author.profile');//兩次查詢
$posts->map(function ($post) {
 //不在產生新查詢
 return $post->author->profile;
});

查看您的sql日志,總共看到三個查詢,但只有調用$posts->load()時才會顯示。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“怎么利用預加載優(yōu)化Laravel Model查詢”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設公司,,關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關知識等著你來學習!


文章名稱:怎么利用預加載優(yōu)化LaravelModel查詢-創(chuàng)新互聯(lián)
文章分享:http://www.xueling.net.cn/article/dddchg.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 亚洲一区高清视频 | 亚洲欧美综合精品成人网站 | 日本三级日本三级韩国三级视 | 日本人在线观看 | 久久久久久毛片精品免费不卡 | 波多野结衣一区二区三区中文字幕 | 欧美激情精品久久久久久不卡 | 偷窥日本少妇撒尿Chinese | 中文字幕韩在线第一页 | 日日噜噜夜夜狠狠久久av小说 | 九九九久久久精品 | 妺妺窝人体色www在线图片 | 国产在线观看好色尤物 | 潘金莲性xxxxhd | 午夜久久久久久久久久 | 91污污 | 日本美女bbw| 丝袜人妻无码专区视频 | 欧美精品八区 | 日本黄色五级片 | 全职猎人1999在线动漫免费观看 | 正在播放av| 国产精品亚洲精品日韩已方 | 亚洲爆乳大丰满无码专区 | 草草影院第一页 | 无码专区—va亚洲v天堂麻豆 | 5x社区在线视频免费播放 | 日本一级黄色录像 | 日韩亚洲精品国产第二页 | 小明成人永久免费视频在线观看 | 国产乱轮在线视频 | 绝顶高潮合集videos | 国产乱子伦精品免费女 | 美日韩精品一区二区三区 | 环太平洋免费看 | 狂野欧美性猛交xxxxx视频 | 久久九九有精品国产 | 4438全国成人免费 | 久久入口 | 色花av | 在线观看视频中文字幕 |