ให้เรตสมาชิก: 2 / 5

ดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
 

ความหมายของ ORM และ Doctrine

ORM ย่อมาจาก Object / Relational Mapping หมายถึง การ map ข้อมูลในตารางข้อมูลของฐานข้อมูลให้อยู่ในรูปของ object-oriented language ซึงจะเป็นการสร้าง Database แบบเสมือนขึ้นให้มาอยู่ในรูป language programming ทำให้ไม่ต้องไปยุ่งกับ SQL Statement ซึ่งถ้ามีการเปลี่ยนแปลงแก้ไขต้องแก้ไขที่ตัวโปรแกรมแทน และการกระทำต่างๆยังคงเป็นแบบ Relational เหมือนเดิม เช่น มีตารางชื่อ product ก็จะแปลงมาเป็น class product คุณลักษณะ (attributes) ของตาราง product ก็จะถูแปลงมาเป็น object ใน class

เราไม่จำเป็นต้องยุ่งในส่วนของ SQL (SELECT, INSERT, UPDATE, DELETE) เลย  แต่เราจะใช้ framework มาช่วยจัดการแปลงจากภาษาโปรแกรมมิ่งที่เราเขียน ไปเป็น SQL หรือ database ให้เราแทน  

สำหรับ framework นั้นก็มีหลายตัวในปัจจุบัน Hibernate,NHibernate,LINQ,SubSonic,Entity Framework,Active Record,Enterprise Library,symfony

โดยแต่ละตัวนั้นก็จะมี API ซึ่งเป็นตัวกลางในการทำหน้าที่ในการแปลงข้อมูลระหว่างฐานข้อมูลและ object รวมถึงคำสั่งพื้นฐานของการจัดการข้อมูลไม่ว่าจะเป็นการ Select,Insert,Update,Delete

ในที่นี้จะพูดถึง Symfony ซึ่งมีตัว API ที่ติดมาด้วยชื่อว่า Doctrine ในการจัดการเกี่ยว ORM

ตัว Symfony นั้นมีการทำงาน แบบ MVC (Model–view–controller) 

 

โดยในส่วนของ doctrine นั้นจะทำงานกับ Model ในการติดต่อกับ ฐานข้อมูล

เวลาที่เราต้องการจะสร้าง database table ขึ้นมา table นึง  เราไม่จำเป็นต้องเขียน SQL เพื่อ create table ขึ้นมาเลย  เราแค่เขียน   class ขึ้นมา  ซึ่ง  class นี้จะถูกเรียกว่า Entity Class จากนั้นก็กำหนด attribute ต่างๆ  ตามที่ต้องการลงไป  attribute นี้เราอาจจะมองว่ามันคือ column ของ table ก็ได้  ทีนี้ framework  มันก็จะเอา  entity class ที่เราเขียนไว้ไปแปลงเป็น table ให้เราเองครับ  
        การ map relation ต่างๆ เช่น One to One, One to Many หรือ Many to Many  เราอยากได้แบบไหน  เราก็เขียนลงไปใน  entity class นั้น  framework มันก็จะเอาไป map ให้เราเอง  มันจะสร้าง foreign key, primary key  ซึ่งเป็นความสัมพันธ์ต่างๆ ของ table ให้เองโดยอัตโนมัติ  
 
การอ่านค่าจาก table ขึ้นมาใช้   มันก็จะแปลงจากข้อมูลที่อยู่ในรูปของ row ไปเป็น object ของ row นั้นให้  ซึ่งไม่เหมือนกับการเขียน code แบบเดิมๆ  ที่ต้องเขียน code เพื่ออ่านค่ามาจาก database  และก็ค่อยจับค่าที่อ่านมาได้นั้นยัดเข้าไปใน object class เอง  ซึ่งมันก็ค่อนข้างลำบากอยู่เหมือนกันครับ  ถ้าระบบเราเป็นระบบที่ใหญ่มากๆ  การดูแลรักษา  หรือการแก้ไข code ก็จะเกิดความยุ่งยากขึ้นได้  เพราะ code ที่เราเขียนมันผูกกันไปมาเต็มไปหมด  ยิ่งถ้าแก้attribute ใน table หรือเปลี่ยนแปลงความสัมพันธ์ของ table ที  ก็ต้องมาตามแก้  Class  ที่อ้างไปถึง table นั้นๆ อีก

        พอเราหันมาใช้ ORM  มันก็จะช่วยให้งานเราสบายขึ้นเยอะ  เวลาแก้ attribute หรือความสัมพันธ์ใน Entity Class ตัว attribute หรือความสัมพันธ์ของ table ก็จะเปลี่ยนแปลงตามไปด้วย   เราอาจจะมองว่า entity class กับ database table มันคือตัวเดียวกันก็ได้ครับ  เพราะ framework  มันจะจัดการทำ mapping ให้เรา..

Credit : http://na5cent.blogspot.com/
กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
ตัวแปรใน PHP
โดย tai14 พฤ 16 ส.ค. 2018 7:18 pm บอร์ด PHP Knowledge
0
6
พฤ 16 ส.ค. 2018 7:18 pm โดย tai14
เครื่องมือและรูปแบบการเขียน PHP
โดย tai14 พฤ 16 ส.ค. 2018 5:17 pm บอร์ด PHP Knowledge
0
6
พฤ 16 ส.ค. 2018 5:17 pm โดย tai14
การ return ค่า ออกมาใช้นอก class ใน python
โดย tatiya พฤ 16 ส.ค. 2018 4:36 pm บอร์ด Python Knowledge
0
5
พฤ 16 ส.ค. 2018 4:36 pm โดย tatiya
ทำความรู้จักกับภาษา PHP
โดย tai14 พฤ 16 ส.ค. 2018 4:10 pm บอร์ด PHP Knowledge
0
9
พฤ 16 ส.ค. 2018 4:10 pm โดย tai14
R - เตรียมข้อมูลใบปริ้นที่ต้องทำเพิ่ม
โดย thatsawan พฤ 16 ส.ค. 2018 1:43 pm บอร์ด OpenERP - MD-ERP
5
47
พฤ 16 ส.ค. 2018 5:29 pm โดย wilawan
รบกวนสอบถามหน่อยครับ Jquery ของ SignalR ไม่ทำงานพอมีวิธีแก้ไหมค่ะ
โดย supattra_su พฤ 16 ส.ค. 2018 12:38 pm บอร์ด Programming - PHP
4
20
พฤ 16 ส.ค. 2018 1:54 pm โดย supattra_su
ฺB - ไม่สามารถเพิ่มข้อมูลที่อยู่ของบริษัทลูกค้าใน การออกใบ Quotations ได้
โดย watcharin พฤ 16 ส.ค. 2018 11:41 am บอร์ด M.D.Soft Co.,Ltd. - Tester
0
4
พฤ 16 ส.ค. 2018 11:41 am โดย watcharin
งานที่ต้องทำประจำวันที่ 16 สิงหาคม 2561
โดย tai14 พฤ 16 ส.ค. 2018 10:25 am บอร์ด MT26 - นางสาวอัครยุภา ยงยุทธ
3
8
พฤ 16 ส.ค. 2018 7:27 pm โดย tai14
งานประจำวันที่ 16 สิงหาคม 2561
โดย prakon พฤ 16 ส.ค. 2018 10:22 am บอร์ด MT24 - นายปกรณ์ วิริยะธนวิโรจน์
1
18
พฤ 16 ส.ค. 2018 10:23 am โดย prakon
งานประจำวันที่ 16 สิงหาคม 2561
โดย pprn พฤ 16 ส.ค. 2018 10:22 am บอร์ด MT25 - นางสาวปรียากมล รินนาศักดิ์
1
4
พฤ 16 ส.ค. 2018 7:40 pm โดย pprn
งานประจำวันที่ 16 สิงหาคม 2561
โดย Lamduan พฤ 16 ส.ค. 2018 10:20 am บอร์ด M066 - นางสาวลำดวน พันโอดเบี้ย
1
3
พฤ 16 ส.ค. 2018 6:58 pm โดย Lamduan
งานประจำวันที่ 16 สิงหาคม 2561
โดย tatiya พฤ 16 ส.ค. 2018 10:00 am บอร์ด M065 - ตติยะ นาชัย
1
3
พฤ 16 ส.ค. 2018 7:58 pm โดย tatiya
G - หลักการส่งข้อมูล ให้ทาง PHP รู้ว่ามี การอัพเดด stock onhand
โดย mindphp พฤ 16 ส.ค. 2018 1:52 am บอร์ด สิริกิตติรัตน์ - Developer
0
3
พฤ 16 ส.ค. 2018 1:52 am โดย mindphp
การใช้ฟังก์ชัน Filter_list
โดย anuwat somsakul พ 15 ส.ค. 2018 6:10 pm บอร์ด PHP Knowledge
0
11
พ 15 ส.ค. 2018 6:10 pm โดย anuwat somsakul
Test ระบบ Open Erp 99
โดย Lamduan พ 15 ส.ค. 2018 6:09 pm บอร์ด M066 - นางสาวลำดวน พันโอดเบี้ย
0
8
พ 15 ส.ค. 2018 6:09 pm โดย Lamduan
วิธีอัด vdo หน้าจอด้วย Camtasia Studio
โดย tai14 พ 15 ส.ค. 2018 4:49 pm บอร์ด Microsoft Office Knowledge & line & Etc
0
12
พ 15 ส.ค. 2018 4:49 pm โดย tai14
สอบถามวิธีการปิด .gitignore ใน netbean ไม่ให้อัพขึ้น git ค่ะ
โดย pprn พ 15 ส.ค. 2018 4:44 pm บอร์ด Programming - PHP
1
20
พ 15 ส.ค. 2018 4:55 pm โดย tsukasaz
มาทำความรู้จักกับ self ใน Python กัน
โดย tatiya พ 15 ส.ค. 2018 3:26 pm บอร์ด Python Knowledge
0
13
พ 15 ส.ค. 2018 3:26 pm โดย tatiya
Q - เพิ่มช่องค้นหาแล้ว error: Call to a member function getGroup() on null
โดย Parichat พ 15 ส.ค. 2018 3:01 pm บอร์ด Joomla Dev
1
4
พ 15 ส.ค. 2018 3:17 pm โดย Parichat
วิธีเปลี่ยนโทนสีของภาพด้วย Photoshop
โดย tai14 พ 15 ส.ค. 2018 1:10 pm บอร์ด Graphic design
1
18
พ 15 ส.ค. 2018 3:00 pm โดย mindphp