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 相关文章推荐
基于mysql的bbs设计(三)
Oct 09 PHP
php执行sql语句的写法
Mar 10 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
Dec 03 PHP
PHP 提取图片img标记中的任意属性的简单实例
Dec 10 PHP
简单谈谈php中ob_flush和flush的区别
Nov 27 PHP
php5.3不能连接mssql数据库的解决方法
Dec 27 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
详解php curl带有csrf-token验证模拟提交方法
Apr 18 PHP
php 可变函数使用小结
Jun 12 PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 PHP
PHP 数组黑名单/白名单实例代码详解
Jun 04 PHP
php实现登录页面的简单实例
Sep 29 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关联数组快速排序的方法
2015/04/17 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
Angular路由简单学习
2016/12/26 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
2017/12/15 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
跟老齐学Python之数据类型总结
2014/09/24 Python
python私有属性和方法实例分析
2015/01/15 Python
Python实现批量下载图片的方法
2015/07/08 Python
详解Django框架中的视图级缓存
2015/07/23 Python
Python3中关于cookie的创建与保存
2018/10/21 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
python中metaclass原理与用法详解
2019/06/25 Python
python Canny边缘检测算法的实现
2020/04/24 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
Canvas实现贝赛尔曲线轨迹动画的示例代码
2019/04/25 HTML / CSS
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
中秋晚会活动方案
2014/08/31 职场文书
教师批评与自我批评
2014/10/15 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
内勤岗位职责
2015/02/10 职场文书
2015年采购部工作总结
2015/04/23 职场文书
给男朋友的道歉短信
2015/05/12 职场文书
风之谷观后感
2015/06/11 职场文书