Laravel Eloquent - รับหนึ่งแถว


91

นี่อาจเป็นคำถามง่ายๆ แต่ฉันคิดไม่ออก ฉันกำลังพยายามหาผู้ใช้ทางอีเมลโดยใช้:

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

แต่นี่เป็นการส่งคืนอาร์เรย์ (ของมิติที่ 1) ของผู้ใช้ $ $user[0]['first_name']ดังนั้นถ้าผมต้องการที่จะได้รับชื่อที่ผมต้องทำ

ฉันลองใช้limit(1)หรือtake(1)หรือแม้กระทั่งใช้->toArray()แต่ก็ไม่มีความแตกต่าง

ผมทำอะไรผิดหรือเปล่า?


1
คุณต้องการรับหนึ่งแถวจากผลการสืบค้นหรือไม่? หรือคุณต้องการเพียงแถวเดียวจากแบบสอบถามฐานข้อมูล?

คำตอบ:



22

คุณสามารถทำได้เช่นกัน

ก่อนที่คุณจะใช้สิ่งนี้คุณต้องประกาศส่วนหน้า DB ในคอนโทรลเลอร์เพียงแค่ใส่บรรทัดนี้สำหรับสิ่งนั้น

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

ลาราเวล 5.2

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

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

หรือ

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

การดำเนินการนี้จะโหลดผู้ใช้ทั้งหมดจากฐานข้อมูลของคุณไปยังหน่วยความจำของเว็บแอปพลิเคชันเซิร์ฟเวอร์และอาจทำให้เกิดปัญหาหากคุณมีข้อมูลผู้ใช้มากกว่าที่คุณสามารถเก็บไว้ใน RAM ของเซิร์ฟเวอร์ได้ คุณต้องการผู้ใช้เพียงคนเดียวจึงไม่จำเป็นต้องเสียหน่วยความจำไปกับผู้ใช้ทั้งหมด สั่งให้ฐานข้อมูลส่งผู้ใช้รายแรกให้คุณ$user = User::whereEmail($email)->first();ตามที่เสนอไว้ในคำตอบที่ยอมรับเท่านั้น
Mladen Danic

-14

คุณยังสามารถใช้สิ่งนี้

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

2
สิ่งนี้จะส่งคืนคอลเล็กชันไม่ใช่องค์ประกอบเดียว
ดานอน

มันจะส่งคืนข้อมูลไม่ใช่ข้อมูลที่ได้รับผลกระทบทั้งหมดไม่เพียง แต่เขาแถวเดียว \
Nadeem

5
โปรดทราบว่าคำตอบนั้นถูกต้องในขณะนี้ (มีการแก้ไข) เหตุผลในการโหวตคือคำตอบก่อนหน้า (ก่อนแก้ไข)
J. Doe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.