Code前端首页关于Code前端联系我们

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

terry 2年前 (2023-09-25) 阅读数 63 #后端开发

使用 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. 
 * 
 * @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,查询构建器中第一个和get方法的源码如下:

/** 
 * 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']);

不同场景下选择满足自己需求的即可。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门