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前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。