របៀបប្រើប្រាស់ MongoDB ជាមួយនឹង Symfony

MongoDB Object Document Mapper (ODM) គឺដូចទៅនឹង Doctrine2 ORM ដូចជា ដំណើរការការងារនិងទស្សនវិស័យរបស់វាផងដែរ។ Bundle គឺទំនេរដែលអាចរួមបញ្ចូលនូវ Doctrine MongoDB ODM ទៅកាន់ Symfony ដើម្បីអោយវាមានភាពងាយស្រួលក្នុងការ configure និងប្រើប្រាស់។

១ ការតម្លើង

ដើម្បីប្រើប្រាស់នូវ MongoDB ODM អ្នកត្រូវការ libraries ចំនួនពីរ ដែលផ្ដល់ដោយ Doctrine និង bundle មួយដែលនឹងធ្វើការរួមបញ្ចូលពួកវាទៅក្នុង Symfony ។

២ ការតម្លើង bundle ជាមួយនឹង Composer

ដើម្បីតម្លើង DoctrineMongoDBBundle ជាមួយនឹង Composer គឺគ្រាន់តែបន្ថែមនូវកូដដូចខាងក្រោមទៅក្នុង composer.json file ៖

mongo1

ពេលនេះអ្នកត្រូវ ដំណើរការនូវ command ខាងក្រោម (Composer’s update) ពី directory ដែលជាកន្លែងដែល composer.json file របស់អ្នកស្ថិតនៅ៖

mongo2

ពេលនេះ Composer បានធ្វើការដោនឡូដ file តែចាំបាច់រួចហើយ បន្ទាប់មកទៀតវានឹងធ្វើការតម្លើង file ទាំងអស់នោះអោយអ្នក។

៣ ការចុះឈ្មោះ annotations និង bundle

បន្ទាប់ទៀតអ្នកត្រូវចុះឈ្មោះនូវ annotations library ដោយគ្រាន់តែបន្ថែមនូវ autoloader ដូចខាងក្រោម៖

mongo3

ទាំងអស់នេះគឺធ្វើឡើងដើម្បី update AppKernel.php file របស់អ្នកនិងចុះឈ្មោះនូវ bundle ថ្មី៖

mongo4

៤ ការ Configuration

អ្នកពិតជាត្រូវការនូវ មូលដ្ឋានគ្រឹះនៃការ configuration ដែលធ្វើការ sets up នូវ document manager ។ វិធីដែលងាយស្រួលនោះគឺបើក auto_mapping ដែលនឹង activate នូវ MongoDB ODM ៖

mongo5

mongo6

៥ ការបង្កើត Document Class

ពេលនេះយើងលើកឧទាហរណ៏មួយដែល យើងនឹងបង្កើត Product object មួយក្នុងការបង្ហាញនូវផលិតផលដែលមាននៅក្នុង application ដូចនេះសូមធ្វើការបង្កើត class មួយនៅក្នុង Document directory នៃ AcmeStoreBundle របស់អ្នក៖

mongo7

Class តែងតែហៅដោយ document មានន័យថា basic class ដែលក្តោបនូវទិន្នន័យ  គឺសាមញ្ញនិងអាចបំពេញនូវតម្រូវការនៃអាជីវកម្មបាន។

៦ ការបន្ថែម Mapping Information

Doctrine អនុញ្ញាតអោយអ្នកធ្វើការជាមួយ MongoDB តាមរយៈវិធីសាស្ត្រជាច្រើន។ Doctrine អាចអោយអ្នកធ្វើការចាប់យក Objects ទាំងមូលចេញមកក្រៅហើយក៏អាចបញ្ចូល Objects ចូលទៅក្នុង MongoDB បានផងដែរ។ ដើម្បីធ្វើបែបនេះបានអ្នកត្រូវបង្កើតនូវ metadata រឺក៏ configuration ដែលនឹងប្រាប់ទៅ Doctrine ថាតើ Product class ហើយនិង properties របស់វាត្រូវធ្វើការ mapped ទៅកាន់ MongoDB ដោយរបៀបណា។ metadata អាចជា លេខ ក្នុងទម្រង់ជាក់លាក់ណាមួយផ្សេងគ្នាដែលរួមមានទាំង YAML, XML រឺក៏ Product class ផ្ទាល់តែម្ដងតាមរយៈ ៖

mongo8

៧ ការបង្កើតនូវ Getters និង Setters

ដើម្បីធ្វើការបង្កើតនូវ Getters និង Setters បានសូមវាយនូវ command ដូចខាងក្រោម៖

mongo9

ត្រូវប្រាកដថាអ្នកបង្កើតវាឡើងសម្រាប់ Product class ។

៨ ការបញ្ចូល Objects ទៅក្នុង MongoDB

ពេលនេះអ្នកបានធ្វើការ mapped Product document រួចរាល់ហើយជាមួយនឹង getter និង setter methods ដូចនេះអ្នកអាចបញ្ចូលទិន្នន័យទៅក្នុង MongoDB បានហើយ។ នៅក្នុង controller ជារឿងល្អបំផុតដែលអ្នកត្រូវធ្វើនោះគឺបន្ថែមនូវកូដដូចខាងក្រោមទៅក្នុង DefaultController នៃ bundle៖

mongo10

បន្ទាត់ទី៨ ដល់ទី១០៖ អ្នកបាន instantiate និងធ្វើការជាមួយនឹង $product object ដូចទៅនឹង PHP object ដទៃទៀតដែរ។

បន្ទាត់ទី១២៖ ធ្វើការចាប់យកនូវ Doctrine’s document manager object  ដែលធ្វើការគ្រប់គ្រងទៅលើដំណើរការនៃការបញ្ចូលនិងចាប់យក objects ចេញមកក្រៅពី MongoDB ។

បន្ទាត់ទី១៣៖ persist() method ប្រាប់ទៅ Doctrine អោយគ្រប់គ្រងលើ $product  object ។

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

៩ ការចាប់យក Objects ពី MongoDB

សូមធ្វើការ configured a route ដើម្បីបង្ហាញនូវ Product ដោយផ្អែកទៅលើតម្លៃនៃ id របស់វា៖

mongo11

ពេលអ្នក query សម្រាប់ប្រភេទជាក់លាក់នៃ object អ្នកតែងតែប្រើនូវអ្វីដែលអ្នកស្គាល់នោះគឺ repository ហើយអ្នកអាចចូលទៅកាន់ repository object នៃ document class តាមរយៈ៖

mongo12

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

mongo13

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

mongo14

១០ ការ Update Object

ដើម្បីធ្វើការ Update object គឺត្រូវធ្វើក្នុង update action នៅក្នុង controller៖

mongo15

ចំណុចសំខាន់បីធំៗក្នុងការ update៖

ទី១ ចាប់យក object ពីក្នុង Doctrine

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

ទី៣ ហៅ flush() លើ document manager

១១ ការលុប Object

Remove() method អាចជួយអ្នកបានក្នុងការលុប Object នៃ document manager៖

mongo16

១២ ការប្រើប្រាស់ Query Builder

Doctrine’s ODM ភ្ជាប់មកជាមួយនូវ query “Builder” object ដែលអនុញ្ញាតអោយអ្នកបង្កើតនូវ query មួយ នៅពេលដែលអ្នកចង់បានវា។ ប្រសិនបើអ្នកប្រើ IDE អ្នកអាចប្រើនូវ auto-completion ដោយគ្រាន់តែវាយនូវឈ្មោះរបស់ method ។ នេះជាអ្វីដែលមាននៅក្នុង controller៖

mongo17

 

សរុបសេចក្ដីមក Doctrine គឺធ្វើការផ្ដោតសំខាន់ទៅលើ objects និងធ្វើអោយ application របស់អ្នកកាន់តែគួរអោយចង់ប្រើ ហើយមួយវិញទៀតគឺវាយកចិត្តទុកដាក់ទៅលើការបញ្ចូលនូវ object ទៅ MongoDB ។ នេះក៏ព្រោះតែ Doctrine អនុញ្ញាតអោយអ្នកប្រើនូវ PHP object ផ្សេងទៀតដែលផ្ទុកនូវទិន្នន័យរបស់អ្នក និងពឹងផ្អែកទៅលើការ mapping metadata information ដែល map នូវ object’s data ទៅកាន់ MongoDB collection។