[laravel 5.4] Eloquent: Relationships การกำหนดความสัมพันธ์

21 ส.ค. 2017 , 9,469 Views   , หมวดหมู่ Laravel ทุกหมวดหมู่ โค๊ดดิ้ง   , ป้ายกำกับ:


การกำหนดความสัมพันธ์

One To One

ความสัมพันธ์แบบ หนึ่งต่อหนึ่ง เช่น ผู้ใช้หนึ่งคนมีโทรศัพท์หนึ่งเครื่อง เป็นต้น

หากจะเข้าถึงข้อมูล Phone ผ่าน Model User

หรือ

ก็จะได้ข้อมูลเหมือนกัน

* User::find(1) คือการค้นหาข้อมูลจาก Primary Key ตาม ตัวอย่างนี้คือ ค้นหา id ของตาราง users ที่มีค่าเท่ากับ 1 (ดูเพิ่มเติม)

Foreign Key

การกำหนด foreign key ใน laravel จะกำหนดโดยใช้ “ชื่อตารางหลัก(ไม่มี s) _id” อัตโนมัติ  ในกรณีตาราง phones Foreign Key ก็จะเป็น “user_id

แต่ถ้าอยากจะกำหนดเป็นชื่ออื่นก็ให้ใช้

หากตาราง users Primary Key ไม่ได้กำหนดชื่อเป็น id อาจจะกำหนดเป็นชื่ออื่น เราก็ต้องเชื่อมความสัมพันธ์ระหว่าง Primary Key และ Foreign Key เอง

 ในทางกลับกันใน Model Phone

หากต้องการเชื่อมความสัมพันธ์กับตาราง users ก็ให้ใช้ belongsTo

ในการณี้ foreign key ไม่ใช่ user_id

ในการณี้ตาราง users Primary Key ไม่ใช่ id

กำหนดค่า Default หากค่าใน Model ที่เชื่อมความสัมพันธ์มีค่า null

เช่น หาก user (record)  โดนลบไป ใน model Post เวลาเรียกใช้งาน User ก็ให้ return ค่าเป็นค่าว่าง

หรือหากจะ return ค่า Default เป็น attributes ก็ตามตัวอย่างด้านล่าง

One To Many

ความสัมพันธ์แบบ หนึ่งต่อกลุ่ม เช่น บทความหนึ่งบทความมีหลายความคิดเห็น เป็นต้น

การเข้าถึง Comment

สามารถฟิวเตอร์ ด้วยเงื่อนไขเข้าไปอีกได้ เช่น ดึงมาเฉพาะ comment ที่มี title ตามต้องการ

การเข้าถึง Post ผ่าน Model Comment

ก็ให้ใช้ belongsTo

Many To Many

ความสัมพันธ์แบบ กลุ่มต่อกลุ่ม เช่น ผู้ใช้งานมีได้หลายสิทธิ์,แต่ละสิทธ์ก็มีได้ในผู้ใช้หลายคน เป็นต้น

ทำให้มีตารางสามตาราง ตารางผู้ใช้งาน, ตารางสิทธิ์, ตารางตารางบอกว่าใครทำอะไรได้บ้าง โครงสร้างจะเป็นแบบตัวอย่าง

ใน Model User

เข้าถึง role ผ่าน user

ปกติตารางที่ใช้เชื่อมระหว่าง model user และ model role ก็จะเป็น role_user (Eloquent will join the two related model names in alphabetical order) หากไม่ใช่ก็สามารถระบุได้

key เชื่อมก็สามารถกำหนดได้เช่นกัน

หากเข้าถึงผ่าน Model Role

 

ดูเพิ่มเติม
https://laravel.com/docs/5.4/eloquent-relationships#defining-relationships

http://www.thaicreate.com/community/laravel-eloquent-orm-model.html

http://www.qsbg.org/BGOaudit/file/1.pdf


ป้ายกำกับ: