ស្វែងយល់ពីការបង្កើតនិងប្រើប្រាស់ Database នៅក្នុង Symfony

រាល់ព័ត៌មាននិងទិន្នន័យដែលបង្ហាញនៅលើ application គឺសុទ្ធតែមានការប្រាស្រ័យទាក់ទងទៅនឹង Database ។ Symfony Framework បានរួមបញ្ចូលនូវ library មួយផ្សេងទៀតដែលហៅថា Doctrine ខណៈពេលដែលវាមិនបានបង្កើតនូវ component ដើម្បីធ្វើការជាមួយនឹង database ។ គោលបំណងរបស់ Doctrine គឺមានតែមួយគត់គឺផ្ដល់អោយអ្នកនូវ tools ដ៏ពេញនិយមដើម្បីអោយទំនាក់ទំនងនៃ database កាន់តែមានភាពងាយស្រួលនិងមានភាពបត់បែន។

ឧទាហរណ៏សាមញ្ញ៖ A Product

សូមមើលទៅក្នុង action ដើម្បីអោយកាន់តែយល់ច្បាស់អំពីដំណើរការរបស់  Doctrine ។ ក្នុងចំនុចនេះ អនកនឹងសិក្សាអំពីការ configure database ការបង្កើត Product object និងការបញ្ចូលវាទៅកាន់ database ព្រមទាំងការប្រមូលវាត្រលប់ចេញមកវិញ។

១ ការ configure the Database

ជាដំបូងអ្នកត្រូវ configure នូវព័ត៌មាននៃ database connection ជាមុនសិន ដែលជាទូទៅ គេតែងតែធ្វើវានៅក្នុង app/config/parameters.yml file ។

db1

នៅពេលនេះ Doctrine អាចភ្ជាប់ទៅកាន់ database របស់អ្នកបានហើយ ចំណែក command ខាងក្រោមអាច generate database មួយដែលមានឈ្មោះថា test_project ដោយស្វ័យប្រវត្តិនិងមិនមានទិន្នន័យអ្វីទាំងអស់៖

db2

២ ការបង្កើត Entity Class

ឧបមាថាអ្នកបង្កើត application មួយដែលត្រូវដាក់បង្ហាញនូវ ផលិតផលជាច្រើន។

មុននឹងគិតទៅដល់ការប្រើប្រាស់ Doctrine រឺក៏ databases អ្នកបានដឹងរួចទៅហើយថាអ្នកនឹងត្រូវការ Product object មួយដើម្បីតំណាងអោយផលិតផលទាំងនោះ។ នេះជាការបង្កើត class នៅក្នុង Entity directory នៃ AppBundle របស់អ្នក៖

db3

Class ដែលត្រូវបានហៅថា  “entity” ជាញឹកញាប់នោះមានន័យថាជា basic class ដែលក្ដោបក្ដាប់ទិន្នន័យ គឺជាលក្ខណៈសាមញ្ញនិងជួយទៅដល់តម្រូវការអាជីវកម្មលើផលិតផលចាំបាច់នៅក្នុង application របស់អ្នក។

Command ខាងក្រោមនេះគឺបង្ហាញអំពីការបង្កើត entity classes ៖

db4

៣ ការ Map ព័ត៌មាន (Mapping Information)៖

Doctrine អនុញ្ញាតអោយអ្នកធ្វើការជាមួយ database តាមវិធីជាច្រើនមិនមែនត្រឹមតែ ការយក scalar data នៅក្នុង array តែប៉ុណ្ណោះទេ។ Doctrine អាចអោយអ្នកធ្វើការចាប់យក Objects ទាំងមូលចេញមកក្រៅហើយក៏អាចបញ្ចូល Objects ចូលទៅក្នុង Database បានផងដែរ។ ដើម្បីធ្វើដូចនេះបាន អ្នកត្រូវធ្វើការ map database tables របស់អ្នកទៅកាន់ PHP classes ជាក់លាក់ណាមួយ និងត្រូវ mapped columns ដែលមាននៅក្នុង Tables ទៅកាន់ Properties ជាក់លាក់ណាមួយដែលត្រូវគ្នាទៅនឹង PHP Classes របស់វា។

db5

អ្នកត្រូវធ្វើការ map ព័ត៌មាននេះ នៅក្នុងទម្រង់នៃ metadata ដែលជាអ្នកប្រមូលផ្ដុំនូវច្បាប់ដែលនឹងប្រាប់ទៅកាន់ Doctrine ថា តើ Product Classes និង Properties របស់វាត្រូវធ្វើការ map ទៅកាន់ Database Tables ណាមួយដោយរបៀបណា។

db6

៤ ការបង្កើត Getters និង Setters៖

ពេលដែលបង្កើត Product class រួចហើយ Properties របស់វាគឺមានលក្ខណៈជា Private តែប៉ុណ្ណោះ ដូចនេះអ្នកត្រូវបង្កើត public getter និង setter methods (getName() និង setName($name)) ដើម្បីអាចចូលទៅប្រើ Properties បាន។ ខាងក្រោមនេះ ជា command ក្នុងការបង្កើត boilerplate methods ដោយស្វ័យប្រវត្តិ។

db7

អ្នកអាច run command ខាងលើម្ដងហើយម្ដងទៀត ហើយវាធ្វើការបង្កើតនូវ getters និង setters ដែលមិនទាន់តែប៉ុណ្ណោះ ប្រសិនបើអ្នកមានរួចហើយ ក៏វាមិនធ្វើការផ្លាស់ប្ដូរនូវ method របស់អ្នកដែលរួចហើយនោះទេ។

អ្នកអាចធ្វើការបង្កើត entitry (PHP classes ផ្សេងទៀតជាមួយនឹង Doctrine mapping information) នៃ bundle រឺក៏ namespace ផ្ទាល់តែម្ដងក៏បានតាមរយៈ command ដូចខាងក្រោម៖

db8

៥ ការបង្កើត Database Tables/Schema៖

Doctrines អាចធ្វើការបង្កើត database tables ចាំបាច់សម្រាប់ entity នៅក្នុង application របស់អ្នកដោយគ្រាន់តែវាយនូវ command ខាងក្រោម៖

db9

ពេលនេះ Database របស់អ្នកគឺមាននូវ product table ហើយអ្នកក៏បានបញ្ចូលនូវ Products object រួចហើយដែរ ដូចនេះសូមធ្វើការបន្ថែមនូវ method ដូចខាងក្រោមទៅក្នុង DefaultController នៃ bundle៖

db10

បន្ទាត់ទី ១៥៖ បន្ទាត់នេះធ្វើការចាប់យកនូវ Doctrine’s entity manager object ដែលជាអ្នកទទួលខុសត្រូវលើដំណើរការនៃការបញ្ចូល និងចាប់យក objects ពី Database ។

បន្ទាត់ទី ១៨៖ persist($product) ប្រាប់ទៅ Doctrine ដើម្បីគ្រប់គ្រងលើ $product object ។

បន្ទាត់ទី ២១៖ ពេលដែល flush() method ត្រូវបានហៅ ដូចនេះ Doctrine ធ្វើការមើលទៅលើ objects ទាំងអស់ដែលវាគ្រប់គ្រងអោយដឹងថាពេលនេះ objects ទាំងអស់កំពុងតែត្រូវការអោយបញ្ចូលវាទៅក្នុង database ។

៦ ការចាប់យក Objects ពី Database៖

ឧទាហរណ៏ថាអ្នកចង់បង្ហាញ Product ដោយផ្អែកទៅលើតម្លៃនៃ id របស់វាគឺ៖

db11

ពេលដែលអ្នក query ប្រភេទនៃ object ណាមួយ នោះអ្នកត្រូវដឹងអំពី repository របស់វាដែលអាចជា PHP Class ហើយអ្នកអាចចូលទៅកាន់ repository object នៃ entity class តាមរយៈ៖

db12

ម៉្យាងទៀតអ្នកអាចចូលទៅកាន់ sorts ទាំងអស់នេះនៃ method ដ៏ពេញនិយមបានផងដែរ។

db13

អ្នកក៏អាចប្រើប្រាស់នូវ findBy() និង findOneBy() methods ដើម្បីងាយស្រួលក្នុងការចាប់យក objects ដោយផ្អែកទៅលើលក្ខខណ្ឌ័ជាច្រើនដូចជា៖

db14

៧ ការ Update Object៖

ដើម្បីធ្វើការ update នូវ Object អ្នកអាចធ្វើដូចខាងក្រោម៖

db15

ការ update មាន ៣ដំណាក់កាលដូចជា៖

ទី១៖ ចាប់យក object ពី Doctrine

ទី២៖ ធ្វើការកែប្រែ object

ទី៣៖ ធ្វើការហៅ flush() នៅលើ entity manager

៨ ការលុប Object៖

អ្នកចាំបាច់ត្រូវប្រើ remove() method នៃ entity manager ដើម្បីធ្វើការលុប object។

db16