ChatGPT解决这个技术问题 Extra ChatGPT

Laravel Eloquent - 获取一行

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

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

但这是返回 $users 的数组(维度为 1)。所以如果我想得到名字,我必须做$user[0]['first_name']

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

我究竟做错了什么?

您想从查询结果中获取一行吗?或者您只想要数据库查询中的一行?

E
EM-Creations

只需使用这个:

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

K
Koushik Das

你也可以这样做

在使用它之前,您必须在控制器中声明 DB 外观

use Illuminate\Support\Facades\DB;

现在你可以使用这个获得一行

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

或者通过这个

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

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

希望这可以帮助。


H
Haritsinh Gohil

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

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

句法:

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

例子:

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

L
Lonare

如果您需要找出任何特定字段,您可以使用

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

$user = User::where('username',$username)->first(); 

$user = User::where('id',$id)->first(); 

M
Mahedi Hasan Durjoy

试试看

$color = \App\Color::take(1)->first();

H
Hussam Adil

拉拉维尔 5.8

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

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

检查docs


a
antelove

拉拉维尔 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(); 的第一个用户。