ให้เรตสมาชิก: 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/
กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
งานประจำวันที่ 25 พฤษภาคม 2562
โดย teenproza7 ส 25 พฤษภาคม 2019 9:52 am บอร์ด M082 - ยศนันท์ ปันคำ
0
2
ส 25 พฤษภาคม 2019 9:52 am โดย teenproza7
ทดลองสอบ TOEIC ก่อนไปลงสนามจริง
โดย teenproza7 ศ 24 พฤษภาคม 2019 7:33 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
7
ศ 24 พฤษภาคม 2019 7:33 pm โดย teenproza7
แก้เมารถ ขี้เมารถ ขึ้นรถทีไรลำบากตลอด
โดย teenproza7 ศ 24 พฤษภาคม 2019 7:10 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
9
ศ 24 พฤษภาคม 2019 7:10 pm โดย teenproza7
ใส่เงาให้กับตัวอักษร
โดย jamepiyawat ศ 24 พฤษภาคม 2019 6:06 pm บอร์ด CSS Knowledge
0
9
ศ 24 พฤษภาคม 2019 6:06 pm โดย jamepiyawat
ความรู้และประสบการณ์ก่อนเริ่มงาน
โดย nanthiya ศ 24 พฤษภาคม 2019 5:58 pm บอร์ด M085 - นางสาวนันทิยา ศรีเพียงจันทร์
0
7
ศ 24 พฤษภาคม 2019 5:58 pm โดย nanthiya
เเนะนำเเอพพลิเคชั่นถ่ายรูปสวยๆ
โดย สริญญา สมสา ศ 24 พฤษภาคม 2019 5:02 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
7
ศ 24 พฤษภาคม 2019 5:02 pm โดย สริญญา สมสา
ใส่เงาให้กรอบรูปภาพ ใส้ตัวข้อความลงในรูปภาพ
โดย jamepiyawat ศ 24 พฤษภาคม 2019 4:17 pm บอร์ด CSS Knowledge
0
14
ศ 24 พฤษภาคม 2019 4:17 pm โดย jamepiyawat
การใช้เเอพพลิเคชั่น Photomath สำหรับการคิดเลข
โดย สริญญา สมสา ศ 24 พฤษภาคม 2019 3:59 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
11
ศ 24 พฤษภาคม 2019 3:59 pm โดย สริญญา สมสา
python เรียกข้อมูลที่เป็นภาษาไทย จาก postgresSQL ไม่ได้ครับ
โดย teenproza7 ศ 24 พฤษภาคม 2019 3:51 pm บอร์ด Programming - C/C++ & java & Python
1
18
ส 25 พฤษภาคม 2019 3:31 am โดย mindphp
R - ปรับเปลี่ยน Export template [2019-05][031]
โดย Parichat ศ 24 พฤษภาคม 2019 3:32 pm บอร์ด Diageo - Web Ordering - Tester
1
5
ศ 24 พฤษภาคม 2019 6:11 pm โดย tsukasaz
error Ascii ครับ
โดย teenproza7 ศ 24 พฤษภาคม 2019 3:19 pm บอร์ด Programming - C/C++ & java & Python
6
31
ส 25 พฤษภาคม 2019 3:37 am โดย mindphp
การเดินทางจากต่างจังหวัด (ร้อยเอ็ด - สาเกตนคร) มา กรุงเทพ รถทัวร์ เครื่องบิน
โดย nanthiya ศ 24 พฤษภาคม 2019 3:18 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
1
26
ส 25 พฤษภาคม 2019 3:16 am โดย mindphp
วิธีใช้เเอพพลิเคชั่นหน้าเด็ก Snapchat
โดย สริญญา สมสา ศ 24 พฤษภาคม 2019 2:53 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
15
ศ 24 พฤษภาคม 2019 2:53 pm โดย สริญญา สมสา
job description MDM & Doc control
โดย nanthiya ศ 24 พฤษภาคม 2019 2:52 pm บอร์ด M085 - นางสาวนันทิยา ศรีเพียงจันทร์
0
10
ศ 24 พฤษภาคม 2019 2:52 pm โดย nanthiya
Job description การทำงานในกองทัพเรือ
โดย jamepiyawat ศ 24 พฤษภาคม 2019 2:44 pm บอร์ด M084 - นายปิยวัช เชาว์วิมล
0
7
ศ 24 พฤษภาคม 2019 2:44 pm โดย jamepiyawat
สุนัขที่เราเลี่ยงรักเราหรือเปล่านะ
โดย jamepiyawat ศ 24 พฤษภาคม 2019 2:24 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
7
ศ 24 พฤษภาคม 2019 2:24 pm โดย jamepiyawat
ระบบเครือข่ายคอมพิวเตอร์
โดย teenproza7 ศ 24 พฤษภาคม 2019 2:04 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
8
ศ 24 พฤษภาคม 2019 2:04 pm โดย teenproza7
สมุนไพรแก้ร้อนใน
โดย jamepiyawat ศ 24 พฤษภาคม 2019 1:41 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
8
ศ 24 พฤษภาคม 2019 1:41 pm โดย jamepiyawat
เดจาวู Dejavu อยู่ดีๆก็แว็บเข้ามาในสมองเหมือนว่าเคยเกิดขึ้น
โดย teenproza7 ศ 24 พฤษภาคม 2019 12:08 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
12
ศ 24 พฤษภาคม 2019 12:08 pm โดย teenproza7
รู้ไหมประเทศไหนที่ห้ามใช้เฟสบุ๊ก
โดย teenproza7 ศ 24 พฤษภาคม 2019 11:33 am บอร์ด Microsoft Office Knowledge & line & Etc
0
15
ศ 24 พฤษภาคม 2019 11:33 am โดย teenproza7