Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon สามารถใช้ loadmissing กับความสัมพันธ์ที่ซ้อนกันได้


สามารถใช้ loadmissing กับความสัมพันธ์ที่ซ้อนกันได้


ใช่ `loadmissing` สามารถใช้กับความสัมพันธ์ที่ซ้อนกันใน Laravel แต่มีความแตกต่างบางอย่างที่ต้องระวัง

`loadmissing 'คืออะไร?

วิธี `loadmissing` ใน Laravel quoquent ใช้เพื่อกระตือรือร้นในการโหลดความสัมพันธ์เฉพาะในกรณีที่พวกเขายังไม่ได้โหลดในอินสแตนซ์ของรุ่น สิ่งนี้จะช่วยหลีกเลี่ยงการสืบค้นซ้ำซ้อนโดยการตรวจสอบว่าข้อมูลความสัมพันธ์มีอยู่แล้วก่อนที่จะสอบถามฐานข้อมูลอีกครั้ง [6]

โดยใช้ `loadmissing` กับความสัมพันธ์ที่ซ้อนกัน

- คุณสามารถระบุความสัมพันธ์ที่ซ้อนกันในสัญกรณ์ดอทด้วย `loadmissing` เช่น` 'ผู้แต่ง. contacts'` เพื่อโหลดความสัมพันธ์ที่ซ้อนกันเฉพาะในกรณีที่มันหายไป [7]
- อย่างไรก็ตามมีพฤติกรรมที่ทราบว่าถ้าคุณ `loadmissing` ความสัมพันธ์ที่ซ้อนกันของความสัมพันธ์ที่โหลดแล้ว Laravel อาจโหลดความสัมพันธ์แบบพาเรนต์ใหม่เอง ตัวอย่างเช่นหากคุณได้โหลด `จารึก 'ในโมเดลแล้วการเรียก` loadmissing (' จารึกความสัมพันธ์ ') `จะทำให้เกิดความสัมพันธ์` จารึก' เพื่อโหลดทั้งหมด [1]
- ซึ่งหมายความว่าในขณะที่ `loadmissing` สนับสนุนความสัมพันธ์ที่ซ้อนกันมันสามารถกระตุ้นการโหลดความสัมพันธ์ระดับกลางหากพวกเขาถูกโหลดก่อนหน้านี้ แต่ไม่มีความสัมพันธ์ซ้อนกัน

ข้อควรพิจารณาในทางปฏิบัติ

- `loadmissing` มีประโยชน์เมื่อคุณต้องการความสัมพันธ์ในการโหลดอย่างมีเงื่อนไขการป้องกันการค้นหาซ้ำหากความสัมพันธ์ถูกโหลดไปแล้ว
- สำหรับความสัมพันธ์ที่ซ้อนกันคุณควรทราบว่าการโหลดความสัมพันธ์ที่ซ้อนกันที่ขาดหายไปจากความสัมพันธ์ทางพาเรนต์ที่โหลดไว้ก่อนหน้านี้อาจทำให้ความสัมพันธ์ของผู้ปกครองในการโหลดซ้ำซึ่งอาจส่งผลกระทบต่อประสิทธิภาพ
- หากคุณต้องการหลีกเลี่ยงการโหลดซ้ำดังกล่าวคุณอาจต้องจัดการอย่างระมัดระวังเมื่อใดและอย่างไรที่คุณโหลดความสัมพันธ์ที่ซ้อนกันหรือพิจารณากระตือรือร้นที่จะโหลดพวกเขาล่วงหน้าด้วย `ด้วย ()`

สรุป

- ใช่ `loadmissing` สามารถใช้กับความสัมพันธ์ที่ซ้อนกันโดยใช้สัญลักษณ์ดอท
- มันโหลดเฉพาะความสัมพันธ์ที่ซ้อนกันหากพวกเขาหายไป
- แต่ถ้าความสัมพันธ์แบบพาเรนต์ถูกโหลดโดยไม่มีความสัมพันธ์ที่ซ้อนกัน `loadmissing` อาจโหลดความสัมพันธ์พาเรนต์ใหม่เพื่อดึงข้อมูลที่ซ้อนกัน [1] [6] [7]

พฤติกรรมนี้เป็นสิ่งสำคัญที่ต้องจำไว้เพื่อหลีกเลี่ยงการสืบค้นหลายครั้งที่ไม่คาดคิดเมื่อทำงานกับการโหลดที่กระตือรือร้นใน Laravel

การอ้างอิง:
[1] https://github.com/laravel/framework/issues/23027
[2] https://stackoverflow.com/questions/62563063/filtering-a-nested-relation-in-graphql
[3] https://compositecode.blog/2023/07/25/graphql-nested-queries-relationships-practices/
[4] https://github.com/fifemon/graphql-datasource/issues/15
[5] https://www.sea-ql.org/sea-orm-cookbook/001-how-to-load-nested-relation.html
[6] https://stackoverflow.com/questions/47238937/laravel-what-is-the-purpose-of-the-loadmissing-function
[7] https://stackoverflow.com/questions/35490728/laravel-eloquent-eager-loading-o-multiple-nested-relationships/53205641
[8] https://docs.sqlalchemy.org/14/orm/loading_relationships.html
[9] https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries