เมื่อใช้งาน->get()
คุณจะไม่สามารถใช้สิ่งใด ๆ ด้านล่าง:
if (empty($result)) { }
if (!$result) { }
if ($result) { }
เพราะถ้าคุณdd($result);
คุณจะสังเกตเห็นว่าอินสแตนซ์ของIlluminate\Support\Collection
ถูกส่งคืนเสมอแม้ว่าจะไม่มีผลลัพธ์ก็ตาม เป็นหลักสิ่งที่คุณกำลังตรวจสอบ$a = new stdClass; if ($a) { ... }
ซึ่งจะกลับจริง
หากต้องการตรวจสอบว่ามีผลลัพธ์ใด ๆ คุณสามารถทำสิ่งใดสิ่งหนึ่งต่อไปนี้:
if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }
คุณสามารถใช้->first()
แทน->get()
ตัวสร้างคิวรีซึ่งจะส่งคืนอินสแตนซ์ของโมเดลที่พบครั้งแรกหรือnull
อื่น ๆ สิ่งนี้มีประโยชน์หากคุณต้องการหรือคาดหวังผลลัพธ์เดียวจากฐานข้อมูล
$result = Model::where(...)->first();
if ($result) { ... }
หมายเหตุ / การอ้างอิง
ข้อมูลโบนัส
ความแตกต่างระหว่าง Collection และ Query Builder อาจสร้างความสับสนให้กับผู้มาใหม่ของ Laravel เนื่องจากชื่อวิธีมักจะเหมือนกันระหว่างทั้งสอง ด้วยเหตุนี้จึงอาจทำให้สับสนในการรู้ว่าคุณกำลังทำอะไรอยู่ ตัวสร้างแบบสอบถามจะสร้างคิวรีเป็นหลักจนกว่าคุณจะเรียกใช้เมธอดที่จะเรียกใช้คิวรีและกดที่ฐานข้อมูล (เช่นเมื่อคุณเรียกเมธอดบางอย่างเช่น->all()
->first()
->lists()
และอื่น ๆ ) วิธีการเหล่านั้นยังมีอยู่บนCollection
วัตถุซึ่งสามารถรับคืนจากตัวสร้างแบบสอบถามหากมีผลลัพธ์หลายรายการ หากคุณไม่แน่ใจว่าคุณใช้คลาสใดอยู่ให้ลองทำvar_dump(User::all())
และทดลองเพื่อดูว่าคลาสนั้นกำลังส่งคืนจริง ๆ (ด้วยความช่วยเหลือget_class(...)
) ฉันขอแนะนำให้คุณตรวจสอบซอร์สโค้ดสำหรับคลาส Collection มันค่อนข้างง่าย จากนั้นตรวจสอบตัวสร้างแบบสอบถามและดูความคล้ายคลึงกันในชื่อฟังก์ชั่นและดูว่าเมื่อใดที่มันกระทบฐานข้อมูล
first()
ผลลัพธ์จะแตกต่างจากget()
ซึ่งสามารถตรวจสอบได้ด้วย!$result
ผลลัพธ์ที่ว่างเปล่าคือnull