Laravel Eloquent - Nhận một hàng


89

Đây có thể là một câu hỏi đơn giản, nhưng tôi không thể hiểu được điều này. Tôi đang cố gắng thu hút người dùng qua email bằng:

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

Nhưng điều này đang trả về một mảng (có thứ nguyên 1) gồm $ người dùng. Vì vậy, nếu tôi muốn có được tên, tôi phải làm $user[0]['first_name'].

Tôi đã thử sử dụng limit(1)hoặc take(1), hoặc thậm chí sử dụng ->toArray()nhưng không có sự khác biệt.

Tôi đang làm gì sai?


1
Bạn muốn lấy một hàng từ kết quả được truy vấn? Hay bạn chỉ muốn một hàng từ truy vấn cơ sở dữ liệu?

Câu trả lời:


208

Chỉ cần sử dụng cái này:

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

21

bạn cũng có thể làm nó như vậy

Trước khi sử dụng, bạn phải khai báo mặt tiền DB trong bộ điều khiển Đơn giản chỉ cần đặt dòng này cho

use Illuminate\Support\Facades\DB;

Bây giờ bạn có thể nhận được một hàng bằng cách sử dụng

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

hoặc bởi cái này nữa

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

Cái này trả về một mảng chỉ có một mục trong đó và trong khi cái đầu tiên trả về một đối tượng. Ghi nhớ nó trong tâm trí.

Hi vọng điêu nay co ich.


7

Sử dụng Laravel Eloquent bạn có thể nhận được một hàng bằng first()phương pháp,

nó trả về hàng đầu tiên của bảng nếu where()điều kiện không được tìm thấy, ngược lại nó trả về hàng phù hợp đầu tiên của tiêu chí đã cho.

Cú pháp:

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

Thí dụ:

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

0

laravel 5,8

Nếu bạn thậm chí không cần toàn bộ hàng, bạn có thể trích xuất một giá trị từ một bản ghi bằng value()phương pháp này. Phương thức này sẽ trả về giá trị của cột trực tiếp:

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

kiểm tra tài liệu



-4

Laravel 5.2

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

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

hoặc là

$user = User::table('users')->where('email', $email)->pluck();

Thao tác này sẽ tải tất cả người dùng từ cơ sở dữ liệu của bạn vào bộ nhớ của máy chủ ứng dụng web và có thể khiến nó gặp sự cố nếu bạn có nhiều dữ liệu người dùng hơn mức bạn có thể lưu trữ trong RAM của máy chủ. Bạn chỉ cần một người dùng, vì vậy không cần lãng phí bộ nhớ cho tất cả họ. Hướng dẫn cơ sở dữ liệu gửi cho bạn người dùng đầu tiên chỉ với $user = User::whereEmail($email)->first();như được đề xuất trong câu trả lời được chấp nhận.
Mladen Danic

-13

Bạn cũng có thể sử dụng cái này

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

2
Điều này sẽ trả về một tập hợp, không phải một phần tử.
Danon

nó sẽ trả về dữ liệu không có toàn bộ dữ liệu có hiệu lực không chỉ anh ta một hàng \
Nadeem

4
Xin lưu ý rằng câu trả lời hiện tại là chính xác (nó đã được chỉnh sửa), lý do cho lượt phản đối là câu trả lời trước đó (trước khi chỉnh sửa)
J. Doe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.