ความสัมพันธ์ `morphtomany 'ใน Laravel ใช้เพื่อกำหนดความสัมพันธ์ polymorphic หลายต่อหลาย ๆ ซึ่งหลายรุ่นสามารถแบ่งปันความสัมพันธ์กับแบบจำลองเดียวผ่านตาราง polymorphic กลาง สิ่งนี้จะช่วยให้การเชื่อมโยงที่ยืดหยุ่นของรุ่นที่แตกต่างกันหลายรุ่นกับรุ่นทั่วไปโดยไม่จำเป็นต้องใช้ตารางเดือยแยกต่างหากสำหรับแต่ละคู่รุ่น
กรณีการใช้งานทั่วไปสำหรับ `morphtomany` ใน laravel
** 1. ระบบติดแท็ก
หนึ่งในกรณีการใช้งานที่พบบ่อยที่สุดคือการใช้ระบบการติดแท็กที่มีหลายรุ่นที่แตกต่างกัน (เช่นโพสต์วิดีโอหน้า) สามารถติดแท็กด้วยแท็กเดียวกัน แทนที่จะมีตารางเดือยแยกต่างหากสำหรับความสัมพันธ์แบบแท็กแต่ละรุ่น `morphtomany` อนุญาตให้แท็กทั้งหมดถูกเก็บไว้ในตาราง` แท็ก 'เดียวและที่เกี่ยวข้อง polymorphically กับโมเดลใด ๆ
ตัวอย่างเช่นโมเดล `post` และ` วิดีโอ 'สามารถมีวิธี `tags ()` วิธีการใช้ `morphtomany` เพื่อดึงแท็กและโมเดล` แท็ก' สามารถใช้ `morphedbymany 'เพื่อรับโพสต์หรือวิดีโอทั้งหมดที่ติดแท็กด้วย [1] [5] [9]
** 2. จัดหมวดหมู่เนื้อหาประเภทต่างๆ
เช่นเดียวกับแท็กหมวดหมู่สามารถแชร์ได้ในประเภทเนื้อหาที่แตกต่างกัน ตัวอย่างเช่นทั้งบทความและผลิตภัณฑ์อาจจำเป็นต้องจัดหมวดหมู่และความสัมพันธ์แบบหลายต่อหลาย polymorphic ช่วยให้พวกเขาแบ่งปันหมวดหมู่โดยไม่ต้องใช้ตารางซ้ำซ้อน
** 3. การกำหนดป้ายกำกับหรือแอตทริบิวต์ให้กับหลายรุ่น
หากคุณมีป้ายกำกับคุณลักษณะหรือคุณสมบัติที่สามารถนำไปใช้กับรุ่นที่แตกต่างกัน (เช่นผู้ใช้คำสั่งซื้อผลิตภัณฑ์) โดยใช้ `morphtomany` ช่วยให้คุณเชื่อมโยงป้ายกำกับเหล่านี้ได้อย่างยืดหยุ่นกับรุ่นใดก็ได้
** 4. บทบาทของผู้ใช้หรือสิทธิ์ในหลายประเภทผู้ใช้
ในแอปพลิเคชันที่มีผู้ใช้หลายประเภท (เช่นผู้ดูแลระบบลูกค้าผู้ขาย) บทบาทหรือการอนุญาตสามารถกำหนด polymorphically โดยใช้ `morphtomany` เพื่อให้บทบาทได้รับการจัดการในตารางเดียว แต่เกี่ยวข้องกับโมเดลผู้ใช้ที่แตกต่างกัน [1]
** 5. การเชื่อมโยงความคิดเห็นหรือไฟล์แนบกับหลายรุ่นในรูปแบบหลายต่อหลาย
ในขณะที่ความคิดเห็นมักจะเป็น polymorphic แบบหนึ่งถึงหลายคนอาจมีสถานการณ์ที่ความคิดเห็นหรือสิ่งที่แนบมาหลายรายการเกี่ยวข้องกับหลายรุ่นในรูปแบบที่หลากหลาย `morphtomany` สามารถใช้ในการจำลองความสัมพันธ์ดังกล่าว
ทำงานได้อย่างไร
- ใช้ตารางเดือยเดียวเช่น `taggables` พร้อมคอลัมน์สำหรับ` tag_id`, `taggable_id` และ` taggable_type '
- คอลัมน์ `taggable_id` และ` taggable_type` คอลัมน์อนุญาตให้ Laravel กำหนดว่าโมเดลใดแท็กเชื่อมโยงกับ
- ในรุ่นที่เกี่ยวข้อง (เช่น `post`,` video ') คุณกำหนดวิธีที่ส่งคืน `$ this-> morphtomany (tag :: class,' taggable ')`
- ในโมเดล `tag` คุณกำหนดความสัมพันธ์แบบผกผันโดยใช้` morphedbymany` เพื่อดึงทุกรุ่นของประเภทที่เกี่ยวข้องที่เกี่ยวข้องกับแท็กนั้น [1] [5]
สรุป
`morphtomany` เป็นอุดมคติเมื่อคุณต้องการเชื่อมโยงหลายรุ่นกับแบบจำลองทั่วไปในรูปแบบ polymorphic แบบหลายต่อหลาย มีการใช้กันอย่างแพร่หลายสำหรับระบบการติดแท็กการจัดหมวดหมู่การกำหนดบทบาทในหลายประเภทผู้ใช้และสถานการณ์ใด ๆ ที่รุ่นที่แตกต่างกันหลายรุ่นแบ่งปันชุดทั่วไปของโมเดลที่เกี่ยวข้องโดยไม่จำเป็นต้องใช้ตารางเดือยแยกต่างหากสำหรับแต่ละคู่
วิธีการนี้ทำให้การออกแบบฐานข้อมูลและการบำรุงรักษาโค้ดง่ายขึ้นโดยการรวมศูนย์ความสัมพันธ์แบบหลายต่อหลาย ๆ ไปยังโครงสร้างที่สง่างาม
การอ้างอิง:
[1] https://blog.logrocket.com/polymorphic-relationships-laravel/
[2] https://laraveldaily.com/post/polymorphic-relations-laravel-open-source-exples
[3] https://stackoverflow.com/questions/57522923/how-to-use-morphtomany
[4] https://stackoverflow.com/questions/43285779/laravel-polymorphic-relations-has-many-through
[5] https://laravel.com/docs/11.x/eloquent-relationships
[6] https://www.linkedin.com/pulse/complete-guide-polymorphic-relationships-morphs-sajith-madhubashana-rk1xc
[7] https://joedixon.co.uk/a-practical-use-use-for-laravels-polymorphic-relationships
[8] https://stackoverflow.com/questions/58811999/what-are-the-uses-of-morphs-column-type-in-laravel
[9] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-rorted-records