Это может быть простой вопрос, но я не могу этого понять. Я пытаюсь получить пользователя по электронной почте, используя:
$user = User::whereEmail($email)->get();
Но это возвращает массив (размерности 1) из $ users. Так что, если я хочу получить имя, я должен это сделать $user[0]['first_name']
.
Я пробовал использовать limit(1)
или take(1)
, или даже, ->toArray()
но разницы не было.
Что я делаю не так?
Ответы:
Просто используйте это:
источник
Ты тоже можешь это сделать
Прежде чем использовать это, вы должны объявить фасад БД в контроллере. Просто поместите эту строку для этого
use Illuminate\Support\Facades\DB;
Теперь вы можете получить строку, используя это
$getUserByEmail = DB::table('users')->where('email', $email)->first();
или этим тоже
$getUserByEmail = DB::select('SELECT * FROM users WHERE email = ?' , ['useremailaddress@email.com']);
Этот возвращает массив только с одним элементом в нем, а первый возвращает объект. Запомни.
Надеюсь это поможет.
источник
Используя Laravel Eloquent, вы можете получить одну строку с помощью
first()
метода,он возвращает первую строку таблицы, если
where()
условие не найдено, в противном случае возвращает первую совпавшую строку заданного критерия.Синтаксис:
Model::where('fieldname',$value)->first();
Пример:
$user = User::where('email',$email)->first(); //OR //$user = User::whereEmail($email)->first();
источник
Laravel 5.8
Если вам даже не нужна вся строка, вы можете извлечь одно значение из записи с помощью этого
value()
метода. Этот метод вернет значение столбца напрямую:$first_name = DB::table('users')->where('email' ,'me@mail,com')->value('first_name');
проверить документы
источник
Попробуйте с этим
$color = \App\Color::take(1)->first();
источник
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();
что предлагается в принятом ответе.Вы также можете использовать это
источник