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开发不能违背的安全规则 过滤用户输入
May 01 PHP
PHP session会话的安全性分析
Sep 08 PHP
php引用计数器进行垃圾收集机制介绍
Sep 19 PHP
php实现分页显示
Nov 03 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
May 21 PHP
PHP获取客户端及服务器端IP的封装类
Jul 21 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
Jul 10 PHP
Yii2框架类自动加载机制实例分析
May 02 PHP
Laravel框架生命周期与原理分析
Jun 12 PHP
Laravel框架自定义公共函数的引入操作示例
Apr 16 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入门基础之php代码写法
2011/12/30 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
JS解析XML实例分析
2015/01/30 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
JavaScript如何操作css
2020/10/24 Javascript
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
2019/02/14 Python
Django框架视图函数设计示例
2019/07/29 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
2019/08/13 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
《观舞记》教学反思
2014/04/16 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书
银行服务理念口号
2015/12/25 职场文书
springboot+rabbitmq实现智能家居实例详解
2022/07/23 Java/Android