Laravel Eloquent - получите одну строку

Это может быть простой вопрос, но я не могу понять это. Я пытаюсь получить пользователя по электронной почте, используя:

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

Но это возвращает массив (размерности 1) из $users. Поэтому, если я хочу получить имя, я должен сделать $user[0]['first_name'].

Я попытался использовать limit(1) или take(1), или даже используя ->toArray(), но не было никакой разницы.

Что я делаю неправильно?

Ответ 1

Просто используйте это:

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

Ответ 2

Ты тоже можешь это сделать

Прежде чем использовать это, вы должны объявить фасад БД в контроллере. Просто поместите эту строку для этого

use Illuminate\Support\Facades\DB;

Теперь вы можете получить строку с помощью этого

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

или этим тоже

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

Этот возвращает массив только с одним элементом, а первый возвращает объект. Запомни.

Надеюсь это поможет.

Ответ 3

Используя Laravel Eloquent, вы можете получить одну строку, используя метод first(),

он возвращает первую строку таблицы, если условие where() не найдено, в противном случае он выдает первую соответствующую строку заданных критериев.

Синтаксис:

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

Пример:

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

Ответ 4

Ларавелла 5.8

Если вам даже не нужна вся строка, вы можете извлечь одно значение из записи, используя метод value(). Этот метод возвращает значение столбца напрямую:

$first_name = DB::table('users')->where('email' ,'[email protected],com')->value('first_name');

проверить документы

Ответ 5

Вы также можете использовать этот

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