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 5.3新特性命名空间规则解析及高级功能
Mar 11 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Jan 27 PHP
PHP通用检测函数集合
Feb 08 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
基于Zend的Config机制的应用分析
May 02 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 PHP
php调用google接口生成二维码示例
Apr 28 PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
PHP中常见的密码处理方式和建议总结
Oct 14 PHP
php定期拉取数据对比方法实例
Sep 22 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
Oct 24 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排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
php生成txt文件标题及内容的方法
2014/01/16 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
js验证表单第二部分
2006/11/25 Javascript
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
JQuery中html()方法使用不当带来的陷阱
2011/04/07 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
vue.js项目 el-input 组件 监听回车键实现搜索功能示例
2018/08/25 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
使用css3绘制出各种几何图形
2016/08/17 HTML / CSS
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
技术总监的工作职责
2013/11/13 职场文书
珍珠奶茶店创业计划书
2014/01/11 职场文书
给水工程专业毕业生自荐信
2014/01/28 职场文书
好学生评语大全
2014/05/05 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
小学校长汇报材料
2014/08/20 职场文书
银行授权委托书范本
2014/10/04 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android
Python实现数据的序列化操作详解
2022/07/07 Python