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 中的输出缓冲
Dec 21 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 PHP
很让人受教的 提高php代码质量36计
Sep 05 PHP
PHP数据过滤的方法
Oct 30 PHP
thinkphp模板继承实例简述
Nov 26 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
PHP输入输出流学习笔记
May 12 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
Yii2框架数据库简单的增删改查语法小结
Aug 31 PHP
php中引用符号(&)的使用详细介绍
Dec 06 PHP
PHP常用算法和数据结构示例(必看篇)
Mar 15 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
zend framework中使用memcache的方法
2016/03/04 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
Python中Random和Math模块学习笔记
2015/05/18 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
读取本地json文件,解析json(实例讲解)
2017/12/06 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
python简单贪吃蛇开发
2019/01/28 Python
HTML的form表单和django的form表单
2019/07/25 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
python实现批处理文件
2020/07/28 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
优秀求职自荐信怎样写
2013/12/18 职场文书
会计大学生职业生涯规划书范文
2014/01/13 职场文书
英语国培研修感言
2014/02/13 职场文书
五四演讲稿范文
2014/09/03 职场文书
匿名检举信范文
2015/03/02 职场文书
无故旷工检讨书
2015/08/15 职场文书
离婚协议书格式范本
2016/03/18 职场文书
Python实现单例模式的5种方法
2021/06/15 Python