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 相关文章推荐
PHP5.5在windows安装使用memcached服务端的方法
Apr 16 PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 PHP
windows7下安装php的php-ssh2扩展教程
Jul 04 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
typecho插件编写教程(一):Hello World
May 28 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
Feb 24 PHP
php实现用户登陆简单实例
Apr 04 PHP
thinkPHP5 tablib标签库自定义方法详解
May 10 PHP
php实现保存周期为1天的购物车类
Jul 07 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 PHP
Yii框架日志操作图文与实例详解
Sep 09 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调用JAVA的WebService简单实例
2014/03/11 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
浅析javascript闭包 实例分析
2010/12/25 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
深入了解JavaScript 私有化
2019/05/30 Javascript
基于jQuery实现挂号平台首页源码
2020/01/06 jQuery
JavaScript实现滑动门效果
2020/01/18 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
Python实现竖排打印传单手机号码易撕条
2015/03/16 Python
Python最基本的输入输出详解
2015/04/25 Python
使用Python中的tkinter模块作图的方法
2017/02/07 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
中药专业大学生医药工作求职信
2013/10/25 职场文书
护理专业求职信
2014/06/15 职场文书
扬州个园导游词
2015/02/06 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
2015年采购员工作总结
2015/04/27 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书
勤俭节约主题班会
2015/08/13 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书