เมธอด `whenloaded ()` ใน Laravel ได้รับการออกแบบมาโดยเฉพาะเพื่อทำงานกับความสัมพันธ์แบบจำลองที่มีคารมคมคาย มันรวมถึงข้อมูลความสัมพันธ์ในการตอบสนองทรัพยากร API เฉพาะในกรณีที่ความสัมพันธ์ได้รับการโหลดในแบบจำลองที่มีคารมคมคาย วิธีนี้จะช่วยหลีกเลี่ยงการสืบค้นฐานข้อมูลที่ไม่จำเป็นและช่วยตอบสนอง API ได้อย่างง่ายดายโดยรวมถึงข้อมูลที่เกี่ยวข้องเมื่อโหลดจริง
บริบทการใช้งานของ `` whenloaded () ``
- โมเดลและความสัมพันธ์ที่มีคารมคมคาย: `เมื่อโหลด ()` ตรวจสอบว่าความสัมพันธ์กับโมเดลที่มีคารมคมคายได้รับการโหลดโดยใช้วิธีการเช่น `ด้วย ()` หรือ `โหลด ()` หากโหลดความสัมพันธ์จะส่งคืนข้อมูลที่เกี่ยวข้อง มิฉะนั้นจะไม่ส่งคืนค่าเริ่มต้นหรือค่าเริ่มต้น พฤติกรรมนี้ควบคู่ไปกับวิธีการภายในของ Eloquent `Relationloaded ()` ซึ่งกำหนดว่าข้อมูลความสัมพันธ์นั้นมีอยู่ในอินสแตนซ์รุ่น [1] [7] [8]
- ทรัพยากร API: มันมักจะใช้ในคลาสทรัพยากร Laravel API เพื่อรวมทรัพยากรหรือคอลเลกชันที่เกี่ยวข้องตามเงื่อนไขว่าความสัมพันธ์นั้นมีความกระตือรือร้นเพิ่มประสิทธิภาพการปรับปรุงประสิทธิภาพและหลีกเลี่ยงปัญหาการสืบค้น N+1 [1] [8]
สามารถใช้เมื่อใช้งานได้กับไลบรารีของบุคคลที่สามได้หรือไม่?
- ไม่มีการสนับสนุนโดยตรงจากโมเดลที่มีคารมคมคาย: เนื่องจาก `` เมื่อ whenloaded () `ต้องอาศัยสถานะภายในของโมเดลที่มีคารมคมคายเพื่อตรวจสอบว่าความสัมพันธ์ถูกโหลดหรือไม่ (` `` `reveloaded () วิธีการ) มันถูกออกแบบมาสำหรับโมเดลที่มีคารมคมคายและความสัมพันธ์ของพวกเขา ห้องสมุดบุคคลที่สามที่ไม่ขยายหรือเลียนแบบแบบจำลองที่มีคารมคมคายและกลไกการโหลดความสัมพันธ์ของพวกเขาไม่สามารถใช้โดยตรง `เมื่อโหลด ()`
-วิธีแก้ปัญหา: หากไลบรารีของบุคคลที่สามส่งคืนวัตถุหรือคอลเลกชันที่ไม่ใช่โมเดลที่มีคารมคมคายคุณจะไม่สามารถใช้ `เมื่อโหลด ()` as-AS-IS คุณจะต้องใช้ตรรกะแบบมีเงื่อนไขที่คล้ายกันด้วยตนเองหรือห่อวัตถุเหล่านั้นในทรัพยากรที่กำหนดเองที่เลียนแบบพฤติกรรม หรือคุณสามารถตรวจสอบด้วยตนเองว่ามีข้อมูลที่เกี่ยวข้องมาก่อนรวมไว้ในการตอบกลับ
สรุป
- `` เมื่อโหลด () `ถูกสร้างขึ้นเพื่อทำงานเฉพาะกับโมเดลที่มีคารมคมคายและความสัมพันธ์ที่โหลดของพวกเขา
- ขึ้นอยู่กับสถานะการโหลดความสัมพันธ์ภายในของ Eloquent ดังนั้นจึงไม่สามารถใช้โดยตรงกับไลบรารีของบุคคลที่สามที่ไม่ได้ใช้แบบจำลองที่มีคารมคมคาย
- เพื่อรวมข้อมูลที่เกี่ยวข้องอย่างมีเงื่อนไขจากแหล่งที่มาของบุคคลที่สามคุณต้องใช้การตรวจสอบตามเงื่อนไขของคุณเองหรือ wrappers ทรัพยากร
สิ่งนี้ทำให้ `` whenloaded () `เป็นเครื่องมือที่ทรงพลังสำหรับการเพิ่มประสิทธิภาพการตอบสนองของ Laravel API แต่ จำกัด ไว้ที่บริบท ORM ที่มีคารมคมคาย [1] [7] [8]
การอ้างอิง:
[1] https://henestrosa.dev/blog/how-to-use-wenloaded-in-laravel-api-resources
[2] https://laracasts.com/discuss/channels/laravel/api-resource-using-count-with-henloaded
[3] https://laravel.com/docs/12.x/eloquent-resources
[4] https://stackoverflow.com/questions/76828050/how-to-get-a-single-field-from-a-laravel-whenloaded-resource
[5] https://www.youtube.com/watch?v=LS7M14ECASU
[6] https://stackoverflow.com/questions/66675594/can-use-use-with-instead-load-loavel-eloquent
[7] https://laraveldaily.com/post/laravel-api-resources-relations-hen-methods
[8] https://laravel-news.com/whenloaded