laravel with 渴求式加载指定字段
2024-08-29 14:49:41
在使用 Laravel 的关联查询中,我们经常使用 with
方法来避免 N+1
查询,但是 with
会将目标关联的所有字段全部查询出来,对于有强迫症的我们来说,当然是不允许的。
这时候我们可以使用下面的技巧在使用 with 时只查询目标关联的部分字段:
$topics = Topic::limit(2)->with(['user'=>function($query){
$query->select('id','username');
}])->get();
但是每次查询都写得这么繁琐真的好么?不如利用 Laravel 的范围查询将其封装起来:
在 Model 基类中定义一个范围查询
class BaseModel extends \Eloquent{
public function scopeWithCertain($query, $relation, Array $columns)
{
return $query->with([$relation => function ($query) use ($columns){
$query->select(array_merge(['id'], $columns));
}]);
}
}
在我们普通的 Model 类都继承基类:
class Topic extends BaseModel{
public function user()
{
return $this->belongsTo('User');
}
}
然后使用就很方便了:
$topics = Topic::limit(2)->withCertain('user', ['username'])->get();
最新文章
- Xamarin 与VS2015RC(xamarin 3.11.450) 报空指针错误。
- Thymeleaf+SpringMVC,如何从模板中获取数据
- Android Activity/Service/Broadcaster三大组件之间互相调用
- survival analysis 生存分析与R 语言示例 入门篇
- 暴力 hihoCoder 1251 Today Is a Rainy Day (15北京C)
- jquey ajax 无刷新提交form
- 2016022609 - redis哈希命令集合
- H5 应用程序返回button的js代码设计,设计仿stack
- thinkphp 分组、页面跳转与ajax
- 基于visual Studio2013解决C语言竞赛题之0904文件排序
- Microsoft Visual C++运行库合集下载(静默安装)
- deinstall oracle 11g on linux
- JavScript--表单提交
- Unity3D UGUI 自动调节大小
- 使用Nodejs在Windows上调用CMD命令
- Python 通用爬虫 和讯博客 scrapy
- 学习Acegi应用到实际项目中(9)- 实现FilterInvocationDefinition
- Linux运维之如何查看目录被哪些进程所占用,lsof命令、fuser命令
- rfid 125khz
- 【LeetCode OJ】Search Insert Position
热门文章
- u3d中 rect[2] == rt->;GetGLWidth() &;&; rect[3] == rt->;GetGLHeight()错误的原因及解决方法
- ScrollView子控件高度设置无效
- 深入浅出:全面理解SQL Server权限体系
- 安卓开发笔记——Fragment+FragmentTabHost组件(实现新浪微博底部菜单)
- Objective-C 语法之 Debug 表达式
- Objective-C语法之扩展(Extension)的使用
- jquery获取data-xxx自定义属性的值遇到的问题
- 土办法 填充NAS空间
- tomcat和nginx的使用
- 2018年7月份,python上传自己的包库到pypi官网的方法