Laravel Eloquent - Dapatkan satu Baris

91

Ini mungkin pertanyaan sederhana, tetapi saya tidak bisa memahaminya. Saya mencoba mendapatkan pengguna melalui email menggunakan:

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

Tapi ini mengembalikan larik (dimensi 1) $ users. Jadi, jika saya ingin mendapatkan nama itu, saya harus melakukannya $user[0]['first_name'].

Saya mencoba menggunakan limit(1)atau take(1), atau bahkan menggunakan ->toArray()tetapi tidak ada perbedaan.

Apa yang saya lakukan salah?

Kousha
sumber
1
Anda ingin mendapatkan satu baris dari hasil kueri? Atau Anda hanya ingin satu baris dari kueri database?

Jawaban:

212

Cukup gunakan ini:

$user = User::whereEmail($email)->first();
Ganesh Jogam
sumber
22

Anda juga bisa melakukan ini

Sebelum Anda menggunakan ini, Anda harus mendeklarasikan fasad DB di controller. Letakkan baris ini untuk itu

use Illuminate\Support\Facades\DB;

Sekarang Anda bisa mendapatkan baris menggunakan ini

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

atau dengan ini juga

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

Yang ini mengembalikan array dengan hanya satu item di dalamnya dan sementara yang pertama mengembalikan sebuah objek. Ingatlah itu.

Semoga ini membantu.

Koushik Das
sumber
7

Menggunakan Laravel Eloquent Anda bisa mendapatkan satu baris menggunakan first()metode,

ia mengembalikan baris pertama tabel jika where()kondisi tidak ditemukan, sebaliknya ia memberikan baris pertama yang cocok dari kriteria yang diberikan.

Sintaksis:

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

Contoh:

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

laravel 5.8

Jika Anda bahkan tidak memerlukan seluruh baris, Anda dapat mengekstrak satu nilai dari catatan menggunakan value()metode ini. Metode ini akan mengembalikan nilai kolom secara langsung:

$first_name = DB::table('users')->where('email' ,'me@mail,com')->value('first_name');

periksa dokumen

Hussam Adil
sumber
0

Coba dengan itu

$color = \App\Color::take(1)->first();
Mahedi Hasan Durjoy
sumber
-4

Laravel 5.2.0

$sql = "SELECT * FROM users WHERE email = $email";

$user = collect(\User::select($sql))->first();

atau

$user = User::table('users')->where('email', $email)->pluck();
antelove
sumber
Ini akan memuat semua pengguna dari database Anda ke dalam memori server aplikasi web, dan mungkin menyebabkannya macet jika Anda memiliki lebih banyak data pengguna daripada yang dapat Anda simpan di RAM server Anda. Anda hanya membutuhkan satu pengguna, jadi tidak perlu membuang memori untuk semuanya. Perintahkan database untuk mengirimi Anda pengguna pertama hanya dengan $user = User::whereEmail($email)->first();seperti yang diusulkan dalam jawaban yang diterima.
Mladen Danic
-14

Anda juga bisa menggunakan ini

$user = User::whereEmail($email)->first();
Gagandeep
sumber
2
Ini akan mengembalikan koleksi, bukan satu elemen.
Danon
itu akan mengembalikan data tidak seluruh data yang terpengaruh tidak hanya dia satu baris \
Nadeem
5
Harap dicatat bahwa jawaban saat ini benar (sudah diedit), alasan downvote adalah jawaban sebelumnya (sebelum edit)
J. Doe