PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > Laravel教程 > 正文

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

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:在使用Laravel ORM的Model方法find, get, first方法获取数据对象时返回的数据对象的attributes属性数组里会包含数据表中所有的字段对应...
    在使用Laravel ORM的Model方法find, get, first方法获取数据对象时返回的数据对象的attributes属性数组里会包含数据表中所有的字段对应的键值关系, 那么如何在ORM查询时只返回数据表中指定字段的数据呢?很多时候,文档上没有写明的用法需要我们去看源码来探究的,下面我们就来看一下这三个方法的实现。

    由于ORM依赖了QueryBuilder来实现查询, 在QueryBuilder的源码里通过查看get,first方法的实现可以到,他们都可以接收一个数组参数来指定要查询的字段:

    find方法的实现是在\Illuminate\Database\Eloquent\Builder类里,如下:

    1. /** 
    2.  * Find a model by its primary key. 
    3.  *www.bcty365.com  
    4.  * @param  mixed  $id 
    5.  * @param  array  $columns 
    6.  * @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection|null 
    7.  */ 
    8. public function find($id$columns = ['*']) 
    9.     if (is_array($id)) { 
    10.         return $this->findMany($id$columns); 
    11.     } 
    12.  
    13.     $this->query->where($this->model->getQualifiedKeyName(), '='$id); 
    14.  
    15.     return $this->first($columns); 

    由于Eloquent Query Builder是依赖查询构建器\Illuminate\Database\Query\Builder的,first和get方法的源码在Query Builder里如下:

     

    1. /** 
    2.  * Execute the query and get the first result. 
    3.  * 
    4.  * @param  array   $columns 
    5.  * @return mixed|static 
    6.  */ 
    7. public function first($columns = ['*']) 
    8.     $results = $this->take(1)->get($columns); 
    9.  
    10.     return count($results) > 0 ? reset($results) : null; 
    11.  
    12. /** 
    13.  * Execute the query as a "select" statement. 
    14.  * 
    15.  * @param  array  $columns 
    16.  * @return array|static[] 
    17.  */ 
    18. public function get($columns = ['*']) 
    19.     if (is_null($this->columns)) { 
    20.         $this->columns = $columns
    21.     } 
    22.  
    23.     return $this->processor->processSelect($this$this->runSelect()); 

    所以使用Laravel的ORM方法查询返回指定的字段可通过如下三种方法来实现
     

    1. $data = ModelA::find($id, ['column1''column2']); 
    2.  
    3. $data = ModelA::first(['column1''column2']); 
    4.  
    5. $data = ModelA::where(['column1''=''value'])->get(['column1''column2']); 


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

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-153-5939-1.html
    相关热词搜索: Laravel