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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【哈佛幸福课笔记】【1】

    【哈佛幸福课笔记】【1】【哈佛幸福课笔记】【1】​​ 一个月的时间看完了哈佛幸福课,正如Tal所说课程的结束才是学习的开始。对于课程观点的思考,对于个人习惯的培养,对于思维模式的转变还需要花大量的时间去练习。这个系列的帖子将作为我个人的读书笔记,也欢迎机缘巧合点开这个帖子的网友一起讨论。(第一章思维导图)​ 课程在讲述的时候有时候并不是线性完整的逻辑,一个观点有时尚没讲完会进入到新的观点中,这样课程显得不是那么的死板不是单纯的说教而是有趣的互动和对实验数据的分析。课程整体的结构十分清晰,可以说干货很多。1.关于内部

    2022年7月25日
    5
  • iterator_category

    /**迭代器类型*1.inputierator*2.writeiterator*3.forwarditerator在迭代器所形成的区间上进行读写操作*4.bidir

    2021年12月18日
    59
  • Mysql主主模式和主键id冲突问题

    Mysql主主模式和主键id冲突问题Mysql双机热备,简单的说,就是要保持两台数据库的数据同步。始终保持两个数据库数据一致。 主要有主备方式、双主方式;,实现双主互备,双主都可以写入;实现简单的负载均衡。问题描述:因为多主中都可以对服务器有写权限,所以设计到自增长重复问题 解决方法: 我们只要保证两台服务器上插入的自增长数据不同就可以了 如:A插入奇数ID,B插偶数ID,当然如果服务器多的话,你可以定…

    2022年6月13日
    30
  • php webservice实例「建议收藏」

    php webservice实例「建议收藏」首先大家要简单了解了何谓webservice,接下来就做两个非常简单的例子,webservice还是逃不开server端与client端。我测试的环境为:apache2.2.11php5.2.10做这个测试之前,要确认你的php配置文件中已经将soap扩展打开,即extension=php_soap.dll;OK现在我们来体验webservice//server端serverSoap.php

    2022年7月21日
    11
  • scrapy安装教程_玻璃幕墙安装介绍

    scrapy安装教程_玻璃幕墙安装介绍在写之前我们先来了解一下什么是Scrapy?Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便Scrapy使用了Twisted[‘twɪstɪd](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不…

    2022年9月18日
    4
  • PHP hexdec() 函数

    PHP hexdec() 函数

    2021年11月7日
    45

发表回复

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

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