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?


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

Jawaban:



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 = ?' , ['useremailaddress@email.com']);

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

Semoga ini membantu.


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

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



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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.