Laravel Eloquent ORM 实现查询表中指定的字段


Posted in PHP onOctober 17, 2019

在使用Laravel ORM的Model方法find, get, first方法获取数据对象时返回的数据对象的attributes属性数组里会包含数据表中所有的字段对应的键值关系, 那么如何在ORM查询时只返回数据表中指定字段的数据呢?很多时候,文档上没有写明的用法需要我们去看源码来探究的,下面我们就来看一下这三个方法的实现。

由于ORM依赖了QueryBuilder来实现查询, 在QueryBuilder的源码里通过查看get,first方法的实现可以到,他们都可以接收一个数组参数来指定要查询的字段:

find方法的实现是在\Illuminate\Database\Eloquent\Builder类里,如下:

/** 
 * Find a model by its primary key. 
 *www.bcty365.com 
 * @param mixed $id 
 * @param array $columns 
 * @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection|null 
 */ 
public function find($id, $columns = ['*']) 
{ 
 if (is_array($id)) { 
  return $this->findMany($id, $columns); 
 } 
 
 $this->query->where($this->model->getQualifiedKeyName(), '=', $id); 
 
 return $this->first($columns); 
}

由于Eloquent Query Builder是依赖查询构建器\Illuminate\Database\Query\Builder的,first和get方法的源码在Query Builder里如下:

/** 
 * Execute the query and get the first result. 
 * 
 * @param array $columns 
 * @return mixed|static 
 */ 
public function first($columns = ['*']) 
{ 
 $results = $this->take(1)->get($columns); 
 
 return count($results) > 0 ? reset($results) : null; 
} 
 
/** 
 * Execute the query as a "select" statement. 
 * 
 * @param array $columns 
 * @return array|static[] 
 */ 
public function get($columns = ['*']) 
{ 
 if (is_null($this->columns)) { 
  $this->columns = $columns; 
 } 
 
 return $this->processor->processSelect($this, $this->runSelect()); 
}

所以使用Laravel的ORM方法查询返回指定的字段可通过如下三种方法来实现

$data = ModelA::find($id, ['column1', 'column2']); 
 
$data = ModelA::first(['column1', 'column2']); 
 
$data = ModelA::where(['column1', '=', 'value'])->get(['column1', 'column2']);

在不同的场景下三者中选符合需要的使用即可。

以上这篇Laravel Eloquent ORM 实现查询表中指定的字段就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
用PHP发电子邮件
Oct 09 PHP
PHP系统流量分析的程序
Oct 09 PHP
PHP4在Windows2000下的安装
Oct 09 PHP
PHP 替换模板变量实现步骤
Aug 24 PHP
PHP static局部静态变量和全局静态变量总结
Mar 02 PHP
php switch语句多个值匹配同一代码块的实现
Mar 03 PHP
PHP_Cooikes不同页面无法传递的解决方法
Mar 07 PHP
ThinkPHP 3.2 数据分页代码分享
Oct 14 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
Oct 17 PHP
PHP laravel中的多对多关系实例详解
Jun 07 PHP
php精度计算的问题解析
Jun 21 PHP
php更新cookie内容的详细方法
Sep 30 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
Oct 17 #PHP
解决laravel5.4下的group by报错的问题
Oct 16 #PHP
laravel ORM关联关系中的 with和whereHas用法
Oct 16 #PHP
laravel 模型查询按照whereIn排序的示例
Oct 16 #PHP
解决Laravel无法使用COOKIE和SESSION的问题
Oct 16 #PHP
laravel 使用事件系统统计浏览量的实现
Oct 16 #PHP
关于laravel 子查询 & join的使用
Oct 16 #PHP
You might like
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
php获取apk包信息的方法
2014/08/15 PHP
详解PHP执行定时任务的实现思路
2015/12/21 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
Python中的map、reduce和filter浅析
2014/04/26 Python
简单的编程0基础下Python入门指引
2015/04/01 Python
python创建列表并给列表赋初始值的方法
2015/07/28 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
python去掉空白行的多种实现代码
2018/03/19 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
Pyinstaller 打包exe教程及问题解决
2019/08/16 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
Python 简单计算要求形状面积的实例
2020/01/18 Python
python利用datetime模块计算程序运行时间问题
2020/02/20 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
丹麦优惠购物网站:PLUSSHOP
2019/03/24 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
艺术爱好者的自我评价分享
2013/10/08 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
法人代表证明书
2014/09/18 职场文书
工程部经理岗位职责
2015/02/02 职场文书
2015年教研工作总结
2015/05/23 职场文书
SQL Server表分区删除详情
2021/10/16 SQL Server
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers