簡體   English   中英

laravel是否緩存所有查詢結果?

[英]Does laravel cache all query results?

laravel / eloquent會記住以前的查詢結果嗎?或者它會多次訪問相關模型而不是將值放入變量中,是否會對性能產生影響:

$user = User::find(1);
doSomething($user->relation->id)
doSomethingElse($user->relation->id)

$user = User::find(1);
$relatedModelId = $user->relation->id
doSomething($relatedModelId)
doSomethingElse($relatedModelId)

如果您僅使用一個具有關系的對象,則無需更改代碼。

但是,如果要加載具有關系的對象的集合,則需要使用緊急加載來避免N + 1問題。

當訪問Eloquent關系作為屬性時,關系數據是“延遲加載”的。 這意味着直到您首次訪問該屬性,關系數據才被實際加載。 但是,Eloquent可以在查詢父模型時“急於加載”關系。 積極的加載減輕了N + 1查詢問題。

https://laravel.com/docs/5.5/eloquent-relationships#eager-loading

因此,使用with()方法來預加載所有相關數據:

$users = User::with('relation')->get();

雄辯地緩存關系,因此您無需如所示將關系分配給變量。 請記住使用有效的關系大小寫-否則,每次執行新查詢時,例如:

$user = User::find(1);
doSomething($user->relation->id);
doSomethingElse($user->relation->id);

僅對關系執行單個查詢,但

$user = User::find(1);
doSomething($user->relation->id);
doSomethingElse($user->RELATION->id);

可能為此關系執行2個查詢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM