ให้เรตสมาชิก: 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/
กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
งานประจำวันที่ 16 ตุลาคม 2561
โดย tai14 อ 16 ต.ค. 2018 9:50 am บอร์ด MT26 - นางสาวอัครยุภา ยงยุทธ
0
1
อ 16 ต.ค. 2018 9:50 am โดย tai14
งานประจำวันที่ 16 ตุลาคม 2561
โดย nice_13 อ 16 ต.ค. 2018 9:48 am บอร์ด M071 - พิชญ์สินี คงจร
0
1
อ 16 ต.ค. 2018 9:48 am โดย nice_13
งานประจำวันที่ 16 ตุลาคม 2561
โดย Ittichai_chupol อ 16 ต.ค. 2018 9:39 am บอร์ด M070 - อิทธิชัย ชูผล
0
2
อ 16 ต.ค. 2018 9:39 am โดย Ittichai_chupol
วิธีแก้ปัญหา ปัญหา string conversion [phpBB Debug] PHP Notice: ใน phpBB 3
โดย mindphp จ 15 ต.ค. 2018 12:27 pm บอร์ด Programming - PHP
1
12
จ 15 ต.ค. 2018 12:28 pm โดย mindphp
Review C71 Barcode Mobile Computer Android 4G 1D&2D Scan Head HF RFID/NFC Fingerprint/Iris InfraRed/PSAM Camera/GPS
โดย Barcode Retail จ 15 ต.ค. 2018 12:09 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
0
13
จ 15 ต.ค. 2018 12:09 pm โดย Barcode Retail
Chainway C71 Barcode Mobile Computer Android 6.0 OS 4G/Dual-band WIFI 5.2'' IPS 1080P Screen 5000mAh Powerful Battery IP
โดย Barcode Retail จ 15 ต.ค. 2018 11:54 am บอร์ด ถาม - ตอบ คอมพิวเตอร์
0
15
จ 15 ต.ค. 2018 11:54 am โดย Barcode Retail
Restore ฐานข้อมูลขนาดใหญ่ ที่ backup มาจาก mysqldump
โดย mindphp จ 15 ต.ค. 2018 11:53 am บอร์ด SQL Knowledge
0
54
จ 15 ต.ค. 2018 11:53 am โดย mindphp
งานประจำวันที่ 15 ตุลาคม 2561
โดย Ittichai_chupol จ 15 ต.ค. 2018 10:15 am บอร์ด M070 - อิทธิชัย ชูผล
1
7
จ 15 ต.ค. 2018 11:14 am โดย mindphp
php เมื่อเลือกข้อมูลใน select แล้ว text กรอกได้แค่อักษร
โดย pppp อ 14 ต.ค. 2018 1:51 pm บอร์ด JavaScript & Jquery Ajax
0
16
อ 14 ต.ค. 2018 1:51 pm โดย pppp
Q - วิธีการ Add Module แล้วในไปแสดงที่แถบเมนูในส่วนของหน้า ACP ในphpbb
โดย Ittichai_chupol ศ 12 ต.ค. 2018 5:50 pm บอร์ด Programming - PHP
9
71
ศ 12 ต.ค. 2018 6:43 pm โดย thatsawan
การทำไอศครีม กระทิ
โดย Ittichai_chupol ศ 12 ต.ค. 2018 5:14 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
25
ศ 12 ต.ค. 2018 5:14 pm โดย Ittichai_chupol
VDO - Module Search (โมดูล เสิร์ช) สำหรับค้นหาสินค้าในร้านค้า
โดย pprn ศ 12 ต.ค. 2018 5:14 pm บอร์ด MT25 - นางสาวปรียากมล รินนาศักดิ์
0
4
ศ 12 ต.ค. 2018 5:14 pm โดย pprn
การทำขนมตาล
โดย Ittichai_chupol ศ 12 ต.ค. 2018 5:13 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
23
ศ 12 ต.ค. 2018 5:13 pm โดย Ittichai_chupol
VDO - รีวิว Module Category (โมดูล แคตตากอรี่) สำหรับแสดงหมวดหมู่สินค้า
โดย pprn ศ 12 ต.ค. 2018 4:28 pm บอร์ด MT25 - นางสาวปรียากมล รินนาศักดิ์
0
3
ศ 12 ต.ค. 2018 4:28 pm โดย pprn
งานประจำวันที่ 12 ตุลาคม 2561
โดย nice_13 ศ 12 ต.ค. 2018 9:48 am บอร์ด M071 - พิชญ์สินี คงจร
1
4
ศ 12 ต.ค. 2018 8:29 pm โดย nice_13
งานประจำวันที่ 12 ตุลาคม 2561
โดย prakon ศ 12 ต.ค. 2018 9:47 am บอร์ด MT24 - นายปกรณ์ วิริยะธนวิโรจน์
1
6
ศ 12 ต.ค. 2018 6:58 pm โดย prakon
งานประจำวันที่ 12 ตุลาคม 2561
โดย pprn ศ 12 ต.ค. 2018 9:09 am บอร์ด MT25 - นางสาวปรียากมล รินนาศักดิ์
1
4
ศ 12 ต.ค. 2018 6:12 pm โดย pprn
งานประจำวันที่ 12 ตุลาคม 2561
โดย Ittichai_chupol ศ 12 ต.ค. 2018 9:01 am บอร์ด M070 - อิทธิชัย ชูผล
2
9
ศ 12 ต.ค. 2018 6:37 pm โดย thatsawan
การทำขนมฝอยทอง
โดย Ittichai_chupol พฤ 11 ต.ค. 2018 5:45 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
1
38
พฤ 11 ต.ค. 2018 5:58 pm โดย daday0807
VDO - รีวิว Module Cart (โมดูล คาร์ท) บอกจำนวนสินค้าและราคาสินค้าในตะกร้าผู้ใช้
โดย pprn พฤ 11 ต.ค. 2018 3:41 pm บอร์ด MT25 - นางสาวปรียากมล รินนาศักดิ์
0
5
พฤ 11 ต.ค. 2018 3:41 pm โดย pprn