ให้เรตสมาชิก: 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/
กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
MOD_MTB_NEWS_RECENT
ถาม- โน๊ดบุคของผมช้าผิดปกติ เกิดจากอะไร ควรแก้ไขยังไงครับ
โดย nuattawoot ศ 17 พ.ย. 2017 7:08 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
0
12
ศ 17 พ.ย. 2017 7:08 pm โดย nuattawoot
วันหยุด 2561 วันหยุดราชการ 2561 / 2018
โดย Before Dong ศ 17 พ.ย. 2017 5:19 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
6
ศ 17 พ.ย. 2017 5:19 pm โดย Before Dong
แจกฟรี!! ปฏิทิน 2018 ประจำปีนักษัตรปีจอ
โดย Before Dong ศ 17 พ.ย. 2017 1:22 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
30
ศ 17 พ.ย. 2017 1:22 pm โดย Before Dong
สภาพหลังจากแก้ bug ของโปรแกรมเมอร์
โดย Before Dong ศ 17 พ.ย. 2017 10:06 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
48
ศ 17 พ.ย. 2017 10:06 am โดย Before Dong
ไฟฟ้าสถิต หรือ พรหมลิขิต
โดย Before Dong พฤ 16 พ.ย. 2017 10:15 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
61
พฤ 16 พ.ย. 2017 10:15 am โดย Before Dong
โปรแกรมไว้ สำหรับเชค ว่าไฟล์ ไหน บน Linux Ubuntu กำลังอ่านเขียนอยู่
โดย mindphp พ 15 พ.ย. 2017 2:56 pm บอร์ด Linux - Web Server
1
24
พ 15 พ.ย. 2017 3:57 pm โดย mindphp
อยากได้ระบบดีๆทุนก็ต้องหนาตามนะครับ
โดย Before Dong พ 15 พ.ย. 2017 10:51 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
125
พ 15 พ.ย. 2017 10:51 am โดย Before Dong
สอบถามเกี่ยวกับการกำหนด Title ในเว็บบอร์ด php BB
โดย AePongsak อ 14 พ.ย. 2017 4:33 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS CRM
2
32
อ 14 พ.ย. 2017 4:33 pm โดย AePongsak
สอบถามขอคำแนะนำการใช้เมนูครับ
โดย toonytoony2004 อ 14 พ.ย. 2017 1:29 pm บอร์ด Joomla Development
3
35
อ 14 พ.ย. 2017 1:29 pm โดย toonytoony2004
เมื่อไปนำเสนอโปรแกรมที่บริษัทลูกค้า
โดย Before Dong อ 14 พ.ย. 2017 10:55 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
3
83
อ 14 พ.ย. 2017 10:55 am โดย konseo
เปรียบเทียบการแต่งตัว "ไปเที่ยวกับไปหาลูกค้า"
โดย Before Dong จ 13 พ.ย. 2017 11:14 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
2
321
จ 13 พ.ย. 2017 11:14 am โดย Before Dong
คำสั่งเช็ค Port บน Linux ว่า port ที่เราอยากรู้ถูกรันมาจากโปรแกรมอะไร ใช้ได้กับ Ubuntu
โดย mindphp อ 12 พ.ย. 2017 7:41 pm บอร์ด Linux - Web Server
1
56
อ 12 พ.ย. 2017 7:41 pm โดย mindphp
เช็ค Version python ใน windows 10 ได้ยังไงค่ะ
โดย thatsawan อ 12 พ.ย. 2017 6:21 pm บอร์ด Programming - C/C++ & java & Python
1
28
อ 12 พ.ย. 2017 6:21 pm โดย mindphp
เมื่อเห็นคนกำลังนั่งกินข้าว
โดย Before Dong ส 11 พ.ย. 2017 10:52 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
1
798
ส 11 พ.ย. 2017 10:52 am โดย konseo
วิธีการใช้ รูปแบบชุดคำสั่งภาษา go
โดย nuattawoot ศ 10 พ.ย. 2017 1:12 pm บอร์ด Programming - C/C++ & java & Python
0
41
ศ 10 พ.ย. 2017 1:12 pm โดย nuattawoot
กว่าจะมาเป็นผลงานสวยๆ
โดย Before Dong ศ 10 พ.ย. 2017 11:07 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
1
55
ศ 10 พ.ย. 2017 11:07 am โดย konseo
สอบถามเรื่อง Bootstrap Carousel
โดย บุคคลทั่วไป ศ 10 พ.ย. 2017 9:05 am บอร์ด Programming - PHP
1
48
ศ 10 พ.ย. 2017 9:05 am โดย บุคคลทั่วไป
Programmer ลุยกิน ลุยเที่ยว กับรีวิวการเดินทางจากดอนเมืองไปยังพิษณุโลก โดยสายการบินไทยไลอ้อนแอร์
โดย thatsawan พฤ 09 พ.ย. 2017 11:54 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
1
54
พฤ 09 พ.ย. 2017 11:54 pm โดย konseo
อยากได้สคริป Stock ครับ
โดย บุคคลทั่วไป พฤ 09 พ.ย. 2017 8:28 pm บอร์ด Free PHP Code Download script
1
59
พฤ 09 พ.ย. 2017 8:28 pm โดย บุคคลทั่วไป
ตำแหน่งของอาการปวดหัว
โดย Before Dong พฤ 09 พ.ย. 2017 1:25 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
2
317
พฤ 09 พ.ย. 2017 1:25 pm โดย Before Dong