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


89

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

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

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

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

Что я делаю не так?


1
Вы хотите получить одну строку из запрошенного результата? Или вам просто нужна одна строка из запроса к базе данных?

Ответы:



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

Laravel 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();

Это загрузит всех пользователей из вашей базы данных в память сервера веб-приложений и, возможно, приведет к его сбою, если у вас будет больше пользовательских данных, чем вы можете сохранить в оперативной памяти вашего сервера. Вам нужен только один пользователь, поэтому не нужно тратить память на всех. Дайте указание базе данных отправлять вам первого пользователя только с тем, $user = User::whereEmail($email)->first();что предлагается в принятом ответе.
Mladen Danic,

-13

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

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

2
Это вернет коллекцию, а не один элемент.
Danon

он вернет данные, но не все обработанные данные, а не только одну строку \
Надим

4
Обратите внимание, что в настоящее время ответ правильный (он отредактирован), причиной отрицательных голосов является предыдущий ответ (до редактирования)
J. Doe
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.