Laravel Eloquent ORM 实现查询表中的指定字段
使用 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前端网发表,如需转载,请注明页面地址。
code前端网
