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 相关文章推荐
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
yii框架中的Url生产问题小结
Jan 16 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
PHP中实现获取IP和地理位置类分享
Feb 10 PHP
php生成rss类用法实例
Apr 14 PHP
php使用curl打开https网站的方法
Jun 17 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
Jan 25 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
Nov 28 PHP
PHP简单实现冒泡排序的方法
Dec 26 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 PHP
Yii2.0建立公共方法简单示例
Jan 29 PHP
PHP实现递归的三种方法
Jul 04 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函数file_get_contents超时处理的方法详解
2013/06/03 PHP
简单的php文件上传(实例)
2013/10/27 PHP
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
php文件缓存类汇总
2014/11/21 PHP
php简单的上传类分享
2016/05/15 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
数理公式,也可以这么唯美
2021/03/10 无线电
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
2016/04/12 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
python正则分组的应用
2013/11/10 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
python3学习之Splash的安装与实例教程
2018/07/09 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
美国老牌主机服务商:iPage
2016/07/22 全球购物
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
合法的离婚协议书范本
2014/10/23 职场文书
财务工作失职检讨书
2014/11/21 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
python实现简易自习室座位预约系统
2021/06/30 Python
Redis基本数据类型String常用操作命令
2022/06/01 Redis