当前位置:首页 > CMS教程 > 其它CMS > 列表

Laravel Eloquent ORM 实现查询表中指定的字段

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-08 15:08:14 浏览: 评论:0 

在使用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. {  
  10.  if (is_array($id)) {  
  11.   return $this->findMany($id$columns);  
  12.  }  
  13.    
  14.  $this->query->where($this->model->getQualifiedKeyName(), '='$id);  
  15.    
  16.  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. {  
  9.  $results = $this->take(1)->get($columns);  
  10.    
  11.  return count($results) > 0 ? reset($results) : null;  
  12. }  
  13.    
  14. /**  
  15.  * Execute the query as a "select" statement.  
  16.  *  
  17.  * @param array $columns  
  18.  * @return array|static[]  
  19.  */ 
  20. public function get($columns = ['*'])  
  21. {  
  22.  if (is_null($this->columns)) {  
  23.   $this->columns = $columns;  
  24.  }  
  25.    
  26.  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']); 

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

Tags: Laravel Eloquent ORM

分享到: