Laravel Eloquent ORM 时如何查询表中指定的字段

Laravel Eloquent ORM 时如何查询表中指定的字段

导读:在使用Laravel ORM的Model方法find, get, first方法获取数据对象时返回的数据对象的attributes属性数组里会包含数据表中所有的字段对应…原文地址:http://www.bcty365.com/content-153-5939-1.html

在使用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']); 

在不同的场景下三者中选符合需要的使用即可。

转载: http://www.bcty365.com/content-153-5939-1.htm

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112426.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • .bat文件打开方式[通俗易懂]

    .bat文件打开方式[通俗易懂]有的时候不小心将后缀名.bat文件在选择打开方式时误勾选了用记事本或者其他文本编辑器打开,结果电脑上的*.bat文件的打开方式都变成了记事本或者其他文本编辑器。本方法就是恢复.bat文件的默认打开方式。1、同时按住windows键和R键,在出来的框中输入regedit,打开注册表编辑器。2、找到:计算机\HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\currentversion\Explorer\FileExts.bat删除除了openwithlist

    2022年7月15日
    22
  • BGP选路原则(2)-local-preference

    BGP选路原则(2)-local-preference

    2021年8月10日
    67
  • virsh 虚拟机迁移目录_虚拟机迁移的六个步骤

    virsh 虚拟机迁移目录_虚拟机迁移的六个步骤简介虚拟机迁移主要分为两种:静态迁移和动态迁移静态迁移是指在虚拟机关闭或暂停的情况下,将源宿主机上虚拟机的磁盘文件和配置文件拷贝到目标宿主机上。这种方式需要显式的停止虚拟机运行,对服务可用性要求高的需求不合适。动态迁移无需拷贝虚拟机配置文件和磁盘文件,但是需要迁移的主机之间有相同的目录结构放置虚拟机磁盘文件,可以通过多种方式实现,本例采用基于共享存储动态迁移,通过NFS来实现。操作环境服

    2022年8月11日
    4
  • android错误之android.util.AndroidRuntimeException: You cannot combine custom titles with other title

    报如下错误:android.util.AndroidRuntimeException: You cannot combine custom titles with other title features这个问题主要是由下面语句造成的。        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);        setContent

    2022年3月10日
    44
  • 从零开始的计网学习——计算机网络概述(计网入门就看这篇!)

    从零开始的计网学习——计算机网络概述(计网入门就看这篇!)计算机网络不论是就业还是升学都是核心的一门课程,一起从零开始,学习计算机网络!

    2022年5月28日
    44
  • html语言代码超链接,html 超链接 word html超链接代码

    html语言代码超链接,html 超链接 word html超链接代码【网页用word打开】可以直接打开word文件的超链接在网页中,怎么样…“打开/保存”是因浏览者的浏览器而异的,假如浏览者的电脑没有装word软件,那么,无论什么情况,都是打不开的,你只能选择保存(选择打开的话,电脑会让你选择使用什么软件来打开);如果浏览者的电脑装了word软件,那么如果电脑的安全级别高一些,一样会提示“打开/保存”,为的是防止直接打开病毒文件。要达到你要的效果,基本不可能,…

    2022年7月12日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号