Laravel预加载

当通过属性访问 Eloquent 关联时,该关联数据会被「延迟加载」。意味着该关联数据只有在你使用属性访问它时才会被加载。
例如

$books = App\Book::all();

foreach ($books as $book) {
    echo $book->author->name;
}

这样将执行N+1步查询:
1次:查询出所有书N本,
N次:每本书查询一次作者

预加载的话

$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, ...)


预加载的方式

加载多个关联
  $books = App\Book::with('author', 'publisher')->get();

加载嵌套关联
    $books = App\Book::with('author.contacts')->get();

筛选加载结果
      $users = App\User::with(['posts' => function ($query) {
           $query->where('title', 'like', '%first%');
           }])->get();

延迟预加载
    $books = App\Book::all();

     if ($someCondition) {
          $books->load(['author' => function ($query) {
             $query->orderBy('published_date', 'asc');
      }]);
}
 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Eloquent: 关联模型 简介 数据库中的表经常性的关联其它的表。比如,一个博客文章可以有很多的评论,或者一个...
    Dearmadman阅读 17,546评论 6 16
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,680评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 12,496评论 6 13
  • 欢迎大家关注我的其他 Github博客 和 CSDN ,互相交流!今天学习了Laravel中的ORM基础部分,现在...
    程序员祝融阅读 2,742评论 0 4
  • 又一次的加班到晚上8点多,明明6点就下班。拖着疲惫的身体推开了出租屋的门,小孙没有开灯,她把自己重重的摔在了床上,...
    兔兔小魔仙阅读 298评论 0 0

友情链接更多精彩内容