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+DBM的同学录程序(1)
Oct 09 PHP
神盾加密解密教程(二)PHP 神盾解密
Jun 08 PHP
php实现递归抓取网页类实例
Apr 03 PHP
Yii2中关联查询简单用法示例
Aug 10 PHP
php版微信js-sdk支付接口类用法示例
Oct 12 PHP
php文件上传 你真的掌握了吗
Nov 28 PHP
PHP会话控制实例分析
Dec 24 PHP
实例介绍PHP中zip_open()函数用法
Feb 15 PHP
php文件操作之文件写入字符串、数组的方法分析
Apr 15 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 PHP
基于ThinkPHP删除目录及目录文件函数
Oct 28 PHP
PHP SESSION跨页面传递失败解决方案
Dec 11 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(6) 面向对象
2010/02/16 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
浅析PHP7新功能及语法变化总结
2016/06/17 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
jQuery读取XML文件的方法示例
2017/02/03 Javascript
javascript定时器取消定时器及优化方法
2017/07/08 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
node.js微信小程序配置消息推送的实现
2019/02/13 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
如何基于Python创建目录文件夹
2019/12/31 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
HTML5 视频播放(video),JavaScript控制视频的实例代码
2018/10/08 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
播音主持专业个人自我评价
2014/01/09 职场文书
骨干教师培训感言
2014/01/16 职场文书
计算机专业优秀大学生自我总结
2014/01/21 职场文书
应届毕业生自荐信
2014/05/28 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
大学生党员自我评价
2015/03/04 职场文书
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers