23

我对何时->get()在 Laravel 感到困惑......

EGDB::table('users')->find(1)不需要 ->get() 来检索结果,也不需要User::find(1)

laravel 文档说“......使用 get 或 first 方法执行查询......”

我已阅读 Fluent Query Builder 和 Eloquent 文档,但不明白何时需要使用 get()...

谢谢您的帮助在此处输入图像描述

4

6 回答 6

20

由于该find()函数将始终使用表的主键,因此不需要 for get()。因为您无法缩小选择范围,这就是为什么它总是会尝试获取该记录并返回它。

但是当您使用 Fluent Query Builder 时,您可以嵌套如下条件:

$userQuery = DB::table('users');
$userQuery->where('email', '=', 'foo@bar.com');
$userQuery->or_where('email', '=', 'bar@foo.com');

这允许您在整个代码中添加条件,直到您真正想要获取它们,然后您将调用该get()函数。

// Done with building the query
$users = $userQuery->get();
于 2012-12-04T08:07:51.737 回答
16
  • 对于find(n),您根据主键“n”检索一行。
  • 对于first(),您检索适合 where 子句的所有行中的第一行。
  • 对于get(),您检索所有符合 where 子句的行。(请注意,访问所有行需要循环,否则会出现一些错误)。
于 2016-07-06T18:37:33.580 回答
1

find从数据库中返回一行并将其表示为 fluent / eloquent 对象。例如SELECT * FROM users WHERE id = 3相当于DB::table('users')->find(3);

get返回一个对象数组。egSELECT * FROM users WHERE created_at > '2014-10-12'相当于DB::table('users')->where('created_at', '>', '2014-10-12')->get()将返回一个包含用户的对象数组,其中 created at 字段比 4014-10-12 更新。

于 2014-11-01T21:43:17.430 回答
0

get()方法将为您提供数据库中满足您的参数的所有值,其中first()您只是获得第一个结果。在搜索密钥时使用find()和。findOrFail()这就是我使用它们的方式:

当我想要一个表中的所有数据时,我使用 all() 方法

Model::all();

当我想通过主键查找时:

  Model::find(1)->first();

或者

 Model::findOrFail(1)->first();

如果存在主键为 1 的行,这将起作用。它应该只检索一行,所以我使用first()而不是get(). 请记住,如果您删除了使用键 1 的行,或者表中没有数据,您find(1)将失败。

当我在 where 子句中查找特定数据时:

Model::where('field', '=', 'value')->get();

当我只想要 where 子句中数据的第一个值时。

Model::where('field', '=', 'value')->first();
于 2017-02-02T20:33:28.947 回答
0

您可以使用 get() 方法和 latest() 方法来获取最近添加到表中的最新记录 例如

$user=Student::latest()->get();

按降序返回所有数据

于 2022-01-31T07:35:30.310 回答
0

基本上您需要了解的是 get() 返回一个集合(请注意,一个对象可以在集合中,但它仍然是一个集合)为什么 first() 从查询结果中返回第一个对象(即它返回一个object) #Take_away Get() 返回一个集合 first() 返回一个对象

于 2020-07-02T06:05:35.160 回答