ให้เรตสมาชิก: 3 / 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/
กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
กองทุนประกันสังคม มีผู้ประกันตนกี่ประเภท ??
โดย natthanit.r2538 พฤ 04 มิ.ย. 2020 5:53 pm บอร์ด Accounting software & ERP โปรแกรมบัญชี ระบบอีอาร์พี
0
3
พฤ 04 มิ.ย. 2020 5:53 pm โดย natthanit.r2538
สรุปความเข้าใจ เกี่ยวกับการตั้งกระทู้
โดย bolue พฤ 04 มิ.ย. 2020 5:16 pm บอร์ด M104 - สุภาภรณ์ อินกรรไกร
0
9
พฤ 04 มิ.ย. 2020 5:16 pm โดย bolue
วิธีการ ลงเวลา โดย Python
โดย bolue พฤ 04 มิ.ย. 2020 4:09 pm บอร์ด Python Knowledge
0
22
พฤ 04 มิ.ย. 2020 4:09 pm โดย bolue
การยื่นแบบ ภ.ง.ด. 53 ออนไลน์ สอนวิธีการยื่นแบบออนไล์ ทำได้ด้วยตัวเอง
โดย natthanit.r2538 พฤ 04 มิ.ย. 2020 3:51 pm บอร์ด Accounting software & ERP โปรแกรมบัญชี ระบบอีอาร์พี
1
11
พฤ 04 มิ.ย. 2020 4:16 pm โดย natthanit.r2538
วิธีการ โชว์ข้อมูลด้วยการ Format วันที่ โดย Python
โดย bolue พฤ 04 มิ.ย. 2020 3:38 pm บอร์ด Python Knowledge
0
23
พฤ 04 มิ.ย. 2020 3:38 pm โดย bolue
การยื่นแบบ ภ.ง.ด. 3 ออนไลน์ สรุปขั้นตอนยื่นแบบภาษี ออนไล์
โดย natthanit.r2538 พฤ 04 มิ.ย. 2020 2:54 pm บอร์ด Accounting software & ERP โปรแกรมบัญชี ระบบอีอาร์พี
1
16
พฤ 04 มิ.ย. 2020 3:08 pm โดย natthanit.r2538
วิธีการเดินทางจาก ปทุมธานี มา กรุงเทพฯ
โดย bolue พฤ 04 มิ.ย. 2020 1:59 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
9
พฤ 04 มิ.ย. 2020 1:59 pm โดย bolue
วิธีการ Search database แบบพื้นฐานๆ โดย Python
โดย bolue พฤ 04 มิ.ย. 2020 1:55 pm บอร์ด Python Knowledge
0
24
พฤ 04 มิ.ย. 2020 1:55 pm โดย bolue
การยื่นแบบ ภ.ง.ด.1 ออนไลน์ ขั้นตอนการยืนแบบออนไลน์
โดย natthanit.r2538 พฤ 04 มิ.ย. 2020 12:35 pm บอร์ด Accounting software & ERP โปรแกรมบัญชี ระบบอีอาร์พี
2
14
พฤ 04 มิ.ย. 2020 1:40 pm โดย natthanit.r2538
สอบถามเรื่องการแนบรูปในกระทู้ค่ะ
โดย natthanit.r2538 พฤ 04 มิ.ย. 2020 12:34 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
2
19
พฤ 04 มิ.ย. 2020 2:31 pm โดย natthanit.r2538
สรุปขั้นตอนการเขียนบทความ และการตั้งกระทู้(จากวีดีโอ)
โดย natthanit.r2538 พฤ 04 มิ.ย. 2020 11:26 am บอร์ด M103 - ณัฐนิตย์ ร่มบ้านโหล๊ะ
0
8
พฤ 04 มิ.ย. 2020 11:26 am โดย natthanit.r2538
สรุปเรื่องที่เรียนตอนเช้า
โดย bolue พฤ 04 มิ.ย. 2020 11:10 am บอร์ด M104 - สุภาภรณ์ อินกรรไกร
0
9
พฤ 04 มิ.ย. 2020 11:10 am โดย bolue
งานประจำวันที่ 4 มิถุนายน 2563
โดย bolue พฤ 04 มิ.ย. 2020 10:32 am บอร์ด M104 - สุภาภรณ์ อินกรรไกร
4
23
พฤ 04 มิ.ย. 2020 7:00 pm โดย bolue
note
โดย bolue พฤ 04 มิ.ย. 2020 10:31 am บอร์ด M104 - สุภาภรณ์ อินกรรไกร
0
2
พฤ 04 มิ.ย. 2020 10:31 am โดย bolue
list ความรู้ที่มี ว่าเคยเรียน หรือ เคยทำอะไรมาบ้าง
โดย bolue พฤ 04 มิ.ย. 2020 10:30 am บอร์ด M104 - สุภาภรณ์ อินกรรไกร
4
24
พฤ 04 มิ.ย. 2020 3:43 pm โดย bolue
Work's on Hand สุภาภรณ์ อินกรรไกร M104
โดย bolue พฤ 04 มิ.ย. 2020 10:29 am บอร์ด M104 - สุภาภรณ์ อินกรรไกร
0
3
พฤ 04 มิ.ย. 2020 10:29 am โดย bolue
งานประจำวันที่ 4 มิถุนายน 2563
โดย natthanit.r2538 พฤ 04 มิ.ย. 2020 9:57 am บอร์ด M103 - ณัฐนิตย์ ร่มบ้านโหล๊ะ
3
33
พฤ 04 มิ.ย. 2020 7:43 pm โดย thatsawan
งานประจำวันที่ 2 มิถุนายน 2563
โดย natthanit.r2538 อ 02 มิ.ย. 2020 10:11 am บอร์ด M103 - ณัฐนิตย์ ร่มบ้านโหล๊ะ
4
40
อ 02 มิ.ย. 2020 7:42 pm โดย natthanit.r2538
มารู้จักจังหวัดสงขลา เมืองสองทะเลกันค่ะ
โดย natthanit.r2538 อ 02 มิ.ย. 2020 4:27 pm บอร์ด M103 - ณัฐนิตย์ ร่มบ้านโหล๊ะ
0
7
อ 02 มิ.ย. 2020 4:27 pm โดย natthanit.r2538
ระบบบัญชีคืออะไร มีความสำคัญอย่างไร และจะทำอย่างไรหากต้องการวางระบบบัญชี
โดย natthanit.r2538 อ 02 มิ.ย. 2020 2:13 pm บอร์ด M103 - ณัฐนิตย์ ร่มบ้านโหล๊ะ
0
6
อ 02 มิ.ย. 2020 2:13 pm โดย natthanit.r2538