Laravel雄辩-获得一排


89

这可能是一个简单的问题,但我无法弄清楚。我正在尝试通过以下方式通过电子邮件获取用户:

$user = User::whereEmail($email)->get();

但这将返回$ users的数组(维度1)。因此,如果要获取名称,则必须这样做$user[0]['first_name']

我尝试使用limit(1)take(1),甚至使用,->toArray()但没有区别。

我究竟做错了什么?


1
您想从查询结果中获得一行?或者您只想从数据库查询中获取一行?

Answers:



21

你也可以这样做

在使用它之前,必须在控制器中声明数据库外观。

use Illuminate\Support\Facades\DB;

现在您可以使用此行

$getUserByEmail = DB::table('users')->where('email', $email)->first();

或也以此

$getUserByEmail = DB::select('SELECT * FROM users WHERE email = ?' , ['useremailaddress@email.com']);

这个返回一个数组,其中只有一个项目,而第一个返回一个对象。记在脑子里。

希望这可以帮助。


7

使用Laravel Eloquent,您可以使用first()方法获得一行,

如果where()找不到条件,则返回表的第一行,否则返回给定条件的第一匹配行。

句法:

Model::where('fieldname',$value)->first();

例:

$user = User::where('email',$email)->first(); 
//OR
//$user = User::whereEmail($email)->first();

0

拉拉韦尔5.8

如果您甚至不需要整行,都可以使用value()方法从记录中提取单个值。此方法将直接返回列的值:

$first_name = DB::table('users')->where('email' ,'me@mail,com')->value('first_name');

检查文件



-4

Laravel 5.2

$sql = "SELECT * FROM users WHERE email = $email";

$user = collect(\User::select($sql))->first();

要么

$user = User::table('users')->where('email', $email)->pluck();

这会将所有用户从数据库中加载到Web应用程序服务器的内存中,如果用户数据量超过服务器RAM中存储的用户数据量,则可能导致数据库崩溃。您只需要一个用户,因此无需浪费所有用户的内存。指示数据库仅向您发送第一个用户$user = User::whereEmail($email)->first();,其方式与接受的答案中所建议的相同。
Mladen Danic

-13

你也可以用这个

$user = User::whereEmail($email)->first();

2
这将返回一个集合,而不是一个元素。

它不会返回数据的整体影响的数据不仅是他一个行\
纳迪姆

4
请注意,答案当前正确(已编辑),不赞成投票的原因是先前的答案(编辑前)
J. Doe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.