laravel 關聯中的預加載


預加載

當作為屬性訪問 Eloquent 關聯時,關聯數據是「懶加載」的。意味着在你第一次訪問該屬性時,才會加載關聯數據。不過,是當你查詢父模型時,Eloquent 可以「預加載」關聯數據。預加載避免了 N + 1 查詢問題。要說明 N + 1 查詢問題,試想一個 Book 模型關聯到 Author 模型:

現在,讓我們來獲得所有書籍和作者數據:

這個循環會運行一次查詢取回所有數據表上的書籍數據,然后又運行一次查詢獲得每本書的作者數據。如果我們有 25 本書,則循環就會執行 26 次查詢:1 次是獲得所有書籍數據,另外 25 條查詢用來獲得每本書的作者數據。

謝天謝地,我們使用預加載讓整個查詢減少到 2 次。這是通過指定關聯給 with 方法辦到的:

$books = App\Book::with('author')->get();
foreach ($books as $book) { echo $book->author->name; }

整個操作,只執行了兩條查詢:

select * from books 
select * from authors where id in (1, 2, 3, 4, 5, ...)

可以批量查詢關聯數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM