ให้เรตสมาชิก: 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/
กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
Ozio Gallery-Components & Plugins สำหรับช่วยให้ดูภาพที่เผยแพร่บน Googleและวีดีโอจาก Youtube ที่ละเอียด
โดย Parichat พ 17 ม.ค. 2018 7:30 pm บอร์ด Joomla Extension Review
0
8
พ 17 ม.ค. 2018 7:30 pm โดย Parichat
ตัวดำเนินการของตัวแปร List
โดย Four พ 17 ม.ค. 2018 4:35 pm บอร์ด Python Knowledge
0
10
พ 17 ม.ค. 2018 4:35 pm โดย Four
การใช้ Del statement
โดย Four พ 17 ม.ค. 2018 4:03 pm บอร์ด Python Knowledge
0
9
พ 17 ม.ค. 2018 4:03 pm โดย Four
Review Applications 17 มกราคม 2561
โดย Jom07 พ 17 ม.ค. 2018 3:44 pm บอร์ด MT23 - สุพรรษา พูลตา
1
16
พ 17 ม.ค. 2018 6:19 pm โดย Jom07
การใช้ Precedence
โดย Four พ 17 ม.ค. 2018 3:36 pm บอร์ด Python Knowledge
0
10
พ 17 ม.ค. 2018 3:36 pm โดย Four
โครงสร้าง Module
โดย tsukasaz พ 17 ม.ค. 2018 3:08 pm บอร์ด Joomla Dev
0
7
พ 17 ม.ค. 2018 3:08 pm โดย tsukasaz
Index VDO Reenigne – คุณวีรศักดิ์ - odoo 10
โดย Four พ 17 ม.ค. 2018 2:33 pm บอร์ด MT22 - อิษยา งามสอาด
0
8
พ 17 ม.ค. 2018 2:33 pm โดย Four
งานประจำวันที่ 17 มกราคม 2561
โดย Four พ 17 ม.ค. 2018 9:56 am บอร์ด MT22 - อิษยา งามสอาด
3
26
พ 17 ม.ค. 2018 4:36 pm โดย Four
Work's on Hand ปาริชาติ รัตโณภาส MT21
โดย Parichat จ 08 ม.ค. 2018 12:11 pm บอร์ด MT21 - ปาริชาติ รัตโณภาส
2
47
พ 17 ม.ค. 2018 10:51 am โดย Parichat
งานประจำวันที่ 17 มกราคม 2561
โดย Parichat พ 17 ม.ค. 2018 9:47 am บอร์ด MT21 - ปาริชาติ รัตโณภาส
11
51
พ 17 ม.ค. 2018 7:31 pm โดย Parichat
ไอเดียในการออกแบบ iphone8
โดย Before Dong พ 17 ม.ค. 2018 10:29 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
16
พ 17 ม.ค. 2018 10:29 am โดย Before Dong
งานประจำวันที่ 17 มกราคม 2561
โดย Jom07 พ 17 ม.ค. 2018 9:57 am บอร์ด MT23 - สุพรรษา พูลตา
1
25
พ 17 ม.ค. 2018 10:44 am โดย Jom07
เจอปัญหานี้บ่อย สำหรับ app ที่อยู่บน pgsql เยอะๆ psql: FATAL: too many connections for role "user_name".
โดย mindphp พ 17 ม.ค. 2018 4:50 am บอร์ด PostgreSQL
1
13
พ 17 ม.ค. 2018 4:51 am โดย mindphp
Thin Client คืออะไร
โดย Jom07 อ 16 ม.ค. 2018 2:38 pm บอร์ด Software testing
0
19
อ 16 ม.ค. 2018 2:38 pm โดย Jom07
วิธีนอน 8 ชั่วโมง ใน 4 ชั่วโมง
โดย Before Dong อ 16 ม.ค. 2018 10:21 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
45
อ 16 ม.ค. 2018 10:21 am โดย Before Dong
งานประจำวันที่ 16 มกราคม 2561
โดย Four อ 16 ม.ค. 2018 9:46 am บอร์ด MT22 - อิษยา งามสอาด
2
40
อ 16 ม.ค. 2018 3:39 pm โดย Four
งานประจำวันที่ 16 มกราคม 2561
โดย Jom07 อ 16 ม.ค. 2018 9:44 am บอร์ด MT23 - สุพรรษา พูลตา
2
37
อ 16 ม.ค. 2018 2:21 pm โดย Jom07
งานประจำวันที่ 16 มกราคม 2561
โดย Parichat อ 16 ม.ค. 2018 9:40 am บอร์ด MT21 - ปาริชาติ รัตโณภาส
2
22
อ 16 ม.ค. 2018 7:12 pm โดย Parichat
เบอร์โทร ศูนย์บริการ ASUS ศูนย์บริการลูกค้าสัมพันธ์ (Call Center) ถามอะไหล่ ค่าบริการงานซ่อมได้
โดย mindphp อ 16 ม.ค. 2018 6:53 am บอร์ด ถาม - ตอบ คอมพิวเตอร์
1
20
อ 16 ม.ค. 2018 6:53 am โดย mindphp
ตามหา พัดลมโน๊ตบุ๊ค ASUS รุ่น Pro36S ของ dc brushless
โดย mindphp อ 16 ม.ค. 2018 6:29 am บอร์ด ถาม - ตอบ คอมพิวเตอร์
0
10
อ 16 ม.ค. 2018 6:29 am โดย mindphp