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调用数据库的存贮过程!
Oct 09 PHP
PHP获取网卡地址的代码
Apr 09 PHP
PHP文件打开、关闭、写入的判断与执行代码
May 24 PHP
Array of country list in PHP with Zend Framework
Oct 17 PHP
检查php文件中是否含有bom的函数
May 31 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
php轻松实现文件上传功能
Mar 03 PHP
抛弃 PHP 代价太高
Apr 26 PHP
php微信公众平台配置接口开发程序
Sep 22 PHP
php获取当前url地址的方法小结
Jan 10 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
Apr 19 PHP
使用ucenter实现多站点同步登录的讲解
Mar 21 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源码分析之变量的存储过程分解
2014/07/03 PHP
YII中assets的使用示例
2014/07/31 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
PDO::setAttribute讲解
2019/01/29 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
laravel请求参数校验方法
2019/10/10 PHP
firefox中JS读取XML文件
2006/12/21 Javascript
JavaScript 学习笔记(五)
2009/12/31 Javascript
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
ES6 更易于继承的类语法的使用
2019/02/11 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
2020/01/19 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
python+opencv实现高斯平滑滤波
2020/07/21 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
CheapTickets香港机票预订网站:CheapTickets.hk
2019/06/26 全球购物
品质口号大全
2014/06/17 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
庆元旦演讲稿
2014/09/15 职场文书
求职意向书范本
2015/05/11 职场文书
迎新年主持词
2015/07/06 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
PHP中多字节字符串操作实例详解
2021/08/23 PHP