ให้เรตสมาชิก: 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/
กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
งานประจำวันที่ 23 มีนาคม 2562
โดย napharat079 ส 23 มี.ค. 2019 9:41 am บอร์ด M079 - นภารัตน์ ฐิติกรโกวิท
0
3
ส 23 มี.ค. 2019 9:41 am โดย napharat079
งานประจำวันที่ 23 มีนาคม 2562
โดย Four ส 23 มี.ค. 2019 9:08 am บอร์ด M077 - อิษยา งามสอาด
0
3
ส 23 มี.ค. 2019 9:08 am โดย Four
Q - ผมติดตั้ง โมดูลฟอนต์ (oecn_base_fonts) ไม่ได้ ปัญหานี้เกิดบนเครื่อง Ubuntu 16.04 นะครับ
โดย tatiya ศ 22 มี.ค. 2019 5:51 pm บอร์ด OpenERP - MD-ERP
1
7
ศ 22 มี.ค. 2019 6:08 pm โดย tatiya
วิธีทำให้ผมสวย
โดย สริญญา สมสา ศ 22 มี.ค. 2019 3:30 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
6
ศ 22 มี.ค. 2019 3:30 pm โดย สริญญา สมสา
วิธีสร้าง color palette จากรูปภาพของตัวเองได้ง่ายๆไม่ซ่ำใคร
โดย napharat079 ศ 22 มี.ค. 2019 3:28 pm บอร์ด Graphic design
0
7
ศ 22 มี.ค. 2019 3:28 pm โดย napharat079
อยากทราบวิธีการ เปลี่ยน รูป icon ที่ Tab ของ Browser บน เว็บบอร์ด phpbb
โดย Ittichai_chupol ศ 22 มี.ค. 2019 3:28 pm บอร์ด Programming - PHP
1
13
ศ 22 มี.ค. 2019 3:34 pm โดย mindphp
Stedia Google Game Platform คืออะไร
โดย Ittichai_chupol ศ 22 มี.ค. 2019 2:36 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
7
ศ 22 มี.ค. 2019 2:36 pm โดย Ittichai_chupol
สอนวิธีทำ warp text รูปร่างอักษรแบบเก๋ๆ ด้วย photoshop
โดย napharat079 ศ 22 มี.ค. 2019 1:38 pm บอร์ด Graphic design
0
9
ศ 22 มี.ค. 2019 1:38 pm โดย napharat079
One ui คืออะไร
โดย Ittichai_chupol ศ 22 มี.ค. 2019 1:29 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
13
ศ 22 มี.ค. 2019 1:29 pm โดย Ittichai_chupol
ประโยชน์ของนม
โดย สริญญา สมสา ศ 22 มี.ค. 2019 11:27 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
5
ศ 22 มี.ค. 2019 11:27 am โดย สริญญา สมสา
งานประจำวันที่ 22 มีนาคม 2562
โดย Four ศ 22 มี.ค. 2019 9:04 am บอร์ด M077 - อิษยา งามสอาด
1
6
ศ 22 มี.ค. 2019 6:54 pm โดย Four
งานประจำวันที่ 22 มีนาคม 2562
โดย napharat079 ศ 22 มี.ค. 2019 8:55 am บอร์ด M079 - นภารัตน์ ฐิติกรโกวิท
3
10
ศ 22 มี.ค. 2019 6:56 pm โดย napharat079
งานประจำวันที่ 22 มีนาคม 2562
โดย สริญญา สมสา ศ 22 มี.ค. 2019 8:52 am บอร์ด MT32 - นางสาวสริญญา สมสา
2
11
ศ 22 มี.ค. 2019 6:57 pm โดย สริญญา สมสา
Q - ตอนกดคำนวนแล้วระยะทางไปแสดงทั้ง 2 ช่อง
โดย Parichat พฤ 21 มี.ค. 2019 10:44 pm บอร์ด Joomla Dev
8
19
ศ 22 มี.ค. 2019 4:25 pm โดย tsukasaz
พื้นฐานโปรเเกรม Open ERP
โดย สริญญา สมสา พฤ 21 มี.ค. 2019 9:14 pm บอร์ด Accounting software & ERP โปรแกรมบัญชี ระบบอีอาร์พี
0
19
พฤ 21 มี.ค. 2019 9:14 pm โดย สริญญา สมสา
งานประจำวันที่ 21 มีนาคม 2562
โดย napharat079 พฤ 21 มี.ค. 2019 9:54 am บอร์ด M079 - นภารัตน์ ฐิติกรโกวิท
1
6
พฤ 21 มี.ค. 2019 7:13 pm โดย napharat079
งานประจำวันที่ 21 มีนาคม 2562
โดย Four พฤ 21 มี.ค. 2019 9:31 am บอร์ด M077 - อิษยา งามสอาด
1
6
พฤ 21 มี.ค. 2019 7:05 pm โดย Four
Q - ขอวิธีแสดงแสดงจังหวัดต้นทางและจังหวัดปลายทางโดยใช้ Ajax ในการดึงชื่อจังหวัดต้นทางและปลายทางจากฐานข้อมูลมาแสดง
โดย Parichat พฤ 21 มี.ค. 2019 2:15 pm บอร์ด Joomla Dev
6
27
พฤ 21 มี.ค. 2019 6:40 pm โดย Parichat
Make Up แก้มชมพูใสๆเนียนๆด้วย Photoshop
โดย napharat079 พฤ 21 มี.ค. 2019 6:19 pm บอร์ด Graphic design
0
37
พฤ 21 มี.ค. 2019 6:19 pm โดย napharat079
รัน python3.7 ไม่ได้ เกิดปัญหา mportError: No module named 'encodings'
โดย tatiya พฤ 21 มี.ค. 2019 6:12 pm บอร์ด Programming - C/C++ & java & Python
1
19
พฤ 21 มี.ค. 2019 6:16 pm โดย tatiya