Sunday, November 6, 2011

Doctrine ගැන දැනගනිමු. (Doctrine Object Relational Mapper)

                  Doctrine කියන්නේ ORM (Object Relational Mapper) එකක්. Doctrine ගැන වැඩි විස්තර කතාකරන්න කලින් ORM කියන්නේ මොකක්ද කියලා බලමු. Database එකක තියෙන data වල යම් පොදු සම්බන්ධතවක් තියෙනවා(relational databases). නමුත් PHP language එක ඒ වගේම symfony framework එක සැකසිලා තියෙන්නේ Object Oriented concept එක පාවිච්චි කරන්න පුලුවන් විදියට. ඉතින් මේ database එකට Object Oriented විදියට access කරන්න නම් මේ object logic එක relational logic එකකට හරවන්න පුලුවන් interface එකක් ඌනේ වෙනවා. මේ interface එක අපිට ORM එකක් කියලා හදුන්වන්න පුලුවන්.
                                           මම symfony ගැන ලියපු ලිපියේ සදහන් කරලා තියෙනව වගේ Doctrine කියන ORM එක පාවිච්චි කරල අපිට පහසුවෙන්ම database transactions කරගන්න පුලුවන්. මේ කියන Doctrine, database එක එක්ක කරන ගනුදෙනුව සරලව අපිට මේ විදියට හිතන්න පුලුවනි. Database එකේ table එකක් හරියට PHP class එකකට අනුරෑපී වෙනවා. ඒ table එකේ තියෙන attributes හරියට PHP class එකේ properties වලට අනුරෑපී වෙනවා. මේ කිව PHP class එකේ object එකක් කියන්නේ මේ table එකේ තියෙන record එකකට map කරන්න පුලුවනි.

අපි දැන් උදාහරණ කීපයක් අරගෙන බලමු කොහොමද මේ database transactions පහසුවෙන් කරගන්නේ කියලා.

1). employee කියන table එකට අලුත් record එකක් add කරන ආකාරය,

               $employee = new Employee();                          ------- a
               $employee->setFirstName('David');                   ------- b
               $employee->setLastName('Wintson');
               $employee->setEmail('david@hotmail.com');
               $employee->save();                                           ------- c    

a) employee කියන table එක map වුන Employee class එකේ object එකක් හදාගන්න.
b) class එකේ තියෙන properties වලට වෙන වෙනම getter, setter methods තියෙනවා. මේ behaviors පාවිච්චි  කරලා අපිට properties වලට values set කරන්න පුලුවන්.
c) දැන් අපි හදාගත්ත object එක database table එකේ record එකක් විදියට save කරන්න පුලුවන්.


2). employee table එකේ id එක 5 වෙන record එක Employee object එකක් විදියට ගන්න ආකාරය,

               $employee = Doctrine :: getTable('Employee')->find(5);

දැන් මේ object එකෙන් එකේ තියෙන properties පාවිච්චි කරන්න පුලුවන්
               $firstName = $employee->getFirstName();
               $lastName  = $employee->getLastName();


3). 'Sells' Department එකට අයත් hometown එක 'Kandy' වන Employee list එක ලබාගන්න Query එකක් ලියන ආකාරය, (department table එකෙන්  employee table එකට foreign key එකක් තියෙනවා)

             $employeeList = Doctrine_Query :: create()
                                          ->from('Employee e')
                                          ->leftJoin('e.Department ed')
                                          ->where('ed.name = ?', 'Sells')
                                          ->andWhere('ed.hometown = ?', 'Kandy')
                                          ->execute();

    $employeeList කියන්නේ Doctrine collection එකක්. ඒ කිව්වේ elements විදියට objects තියෙන array එකක්. foreach loop එකක් පාවිච්චි කරලා මේ array එකේ තියෙන object ව්ලින් අපිට ඌන දේ කරගන්න පුලුවන්.

මේ උදාහරණ කිහිපයෙන් පැහැදිලි වෙනවා ඇති SQL query ලියනවට වඩා Doctrine query ලියන එක කොච්චර ලේසිද කියලා.

              මේ කියන Doctrine interface එක database transactions කරන්නේ PDO (PHP Data Object) කියන තව interface එකක් හරහා. මේ PDO interface එක නිසා අපේ application එක පාවිච්චි කරලා තියෙන DBMS එක මත depend වෙන්නේ නැතිව එකේ තියෙන data වලට access කිරීමේ හැකියාව Doctrine වලට ලැබිල තියෙනවා. ඒක Doctrine වල තියෙන විශේ ලක්නයක්. අපිට කෙලින්ම PDO වලින් වුනත් මේ DBMS independent data accessing කරගන්න පුලුවන්. ඒ වුනත් ඒකට වඩා DQL (Doctrine Query Language) එක high level.

                               ඉතින් Doctrine ගැන මම දැනගත්ත දේවල් ටිකක් තම මේ ලිපියේ සදහන් කරලා තියෙන්නේ. මේ ලිපිය හරහා ඔබට ORM කියන concept එක ගැනත් යම් දැනුමක් ලැබෙන්න ඇති. මෙය ඔබේ දැනුමට වැදගත් වේවි කියලා හිතනවා.

No comments:

Post a Comment