问题
This might be a simple question, but I cannot figure this out. I am trying to get a user by email using:
$user = User::whereEmail($email)->get();
But this is returning an array (of dimension 1) of $users. So If I want to get the name, I have to do $user[0]['first_name']
.
I tried using limit(1)
or take(1)
, or even using ->toArray()
but there was no difference.
What am I doing wrong?
回答1:
Simply use this:
$user = User::whereEmail($email)->first();
回答2:
You can do this too
Before you use this you must declare the DB facade in the controller Simply put this line for that
use Illuminate\Support\Facades\DB;
Now you can get a row using this
$getUserByEmail = DB::table('users')->where('email', $email)->first();
or by this too
$getUserByEmail = DB::select('SELECT * FROM users WHERE email = ?' , ['useremailaddress@email.com']);
This one returns an array with only one item in it and while the first one returns an object. Keep that in mind.
Hope this helps.
回答3:
Using Laravel Eloquent you can get one row using first()
method,
it returns first row of table if where()
condition is not found otherwise it gives the first matched row of given criteria.
Syntax:
Model::where('fieldname',$value)->first();
Example:
$user = User::where('email',$email)->first();
//OR
//$user = User::whereEmail($email)->first();
回答4:
laravel 5.8
If you don't even need an entire row, you may extract a single value from a record using the value()
method. This method will return the value of the column directly:
$first_name = DB::table('users')->where('email' ,'me@mail,com')->value('first_name');
check docs
回答5:
Laravel 5.2
$sql = "SELECT * FROM users WHERE email = $email";
$user = collect(\User::select($sql))->first();
or
$user = User::table('users')->where('email', $email)->pluck();
回答6:
You can also use this
$user = User::whereEmail($email)->first();
来源:https://stackoverflow.com/questions/23925476/laravel-eloquent-get-one-row