Laravel Eloquent - Отримайте один рядок


89

Це може бути просте запитання, але я не можу це зрозуміти. Я намагаюся отримати користувача електронною поштою за допомогою:

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

Але це повертає масив (розміру 1) користувачів $. Отже, якщо я хочу отримати ім’я, я повинен це зробити $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();запропонованим у прийнятій відповіді.
Младен Даніч

-13

Ви також можете використовувати це

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

2
Це поверне колекцію, а не один елемент.
Данон

він поверне дані, а не всі виконані дані, а не лише один рядок \
Надім

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