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 信息采集程序代码
Mar 17 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
Apr 10 PHP
PHP 读取和编写 XML
Nov 19 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
Nov 29 PHP
php解析http获取的json字符串变量总是空白null
Mar 02 PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
php图像验证码生成代码
Jun 08 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
PHP实现微信小程序用户授权的工具类示例
Mar 05 PHP
PHP 实现重载
Mar 09 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获取当前完整URL地址的函数
2014/12/21 PHP
PHP+jQuery翻板抽奖功能实现
2015/10/19 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
PHP的imageTtfText()函数深入详解
2021/03/03 PHP
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
jQuery获取URL请求参数的方法
2015/07/18 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
微信小程序实现时间预约功能
2018/11/27 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
2019/05/30 Javascript
js JSON.stringify()基础详解
2019/06/19 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
如何在python中使用selenium的示例
2017/12/26 Python
使用python存储网页上的图片实例
2018/05/22 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
团工委书记自荐书范文
2013/12/17 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
MySQL infobright的安装步骤
2021/04/07 MySQL
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS