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下使用SMTP发邮件的代码
Jan 10 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
Jul 31 PHP
深入PHP5中的魔术方法详解
Jun 17 PHP
解析argc argv在php中的应用
Jun 24 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
使用新浪微博API的OAuth认证发布微博实例
Mar 27 PHP
php检测url是否存在的方法
Apr 14 PHP
php实现计算百度地图坐标之间距离的方法
May 05 PHP
Yii2中使用join、joinwith多表关联查询
Jun 30 PHP
php删除数组指定元素实现代码
May 03 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 10 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/06/02 PHP
深入apache host的配置详解
2013/06/09 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
php导出word格式数据的代码实例
2013/11/25 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
laravel批量生成假数据的方法
2019/10/09 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
Javascript获取当前日期的农历日期代码
2014/10/08 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
Javascript连接Access数据库完整实例
2015/08/03 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
python解析xml文件实例分享
2013/12/04 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
酒店司机岗位职责
2013/12/14 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
PHP设计模式(观察者模式)
2021/07/07 PHP