การติดตั้งและตั้งค่า ORM Framework (ตัวอย่าง: Doctrine)
หลังจากที่เราได้ทำความเข้าใจและเปรียบเทียบ ORM Framework ยอดนิยมกันไปแล้วในบทที่แล้ว (Doctrine, Eloquent และอื่นๆ) ในบทนี้เราจะมาลงมือปฏิบัติจริง โดยจะเน้นไปที่การติดตั้งและตั้งค่า Doctrine ORM ซึ่งเป็น ORM ที่มีความยืดหยุ่นสูงและเหมาะสำหรับโปรเจกต์ขนาดใหญ่ หากคุณยังไม่เคยใช้ ORM มาก่อน ไม่ต้องกังวล เราจะค่อยๆ อธิบายไปทีละขั้นตอนครับ
Composer คืออะไร? ทำไมต้องใช้?
ก่อนที่เราจะเริ่มติดตั้ง Doctrine ได้นั้น เราจำเป็นต้องรู้จักกับ Composer เสียก่อน Composer คือ Dependency Manager หรือเครื่องมือจัดการ Dependency สำหรับภาษา PHP พูดง่ายๆ คือ Composer จะช่วยจัดการ library หรือ package ต่างๆ ที่โปรเจกต์ของเราต้องการใช้งาน โดยการ download และติดตั้งให้เราอัตโนมัติ ทำให้เราไม่ต้องเสียเวลาไป download และจัดการไฟล์ต่างๆ เอง
ทำไมเราต้องใช้ Composer?
- จัดการ Dependency ได้ง่าย: Composer จะช่วยจัดการว่าโปรเจกต์ของเราต้องการ library อะไรบ้าง และ library เหล่านั้นต้องการ library อะไรอีกต่อหนึ่ง (Dependency ซ้อน Dependency)
- ติดตั้งและอัปเดต Library ได้ง่าย: เพียงแค่ใช้คำสั่งเดียว Composer ก็จะทำการ download และติดตั้ง library ที่เราต้องการให้เรา
- Version Control: Composer จะช่วยจัดการ version ของ library ต่างๆ ทำให้โปรเจกต์ของเราทำงานได้อย่างถูกต้อง แม้ว่า library จะมีการอัปเดต
ถ้าคุณยังไม่ได้ติดตั้ง Composer สามารถดาวน์โหลดและติดตั้งได้จาก https://getcomposer.org/
การติดตั้ง Doctrine
เมื่อเราติดตั้ง Composer เรียบร้อยแล้ว ขั้นตอนต่อไปคือการติดตั้ง Doctrine ผ่าน Composer ครับ ให้เปิด Command Line หรือ Terminal แล้วไปยัง directory ของโปรเจกต์ PHP ของเรา จากนั้นรันคำสั่งต่อไปนี้:
composer require doctrine/orm doctrine/dbal
คำสั่งนี้จะบอกให้ Composer download และติดตั้ง 2 package หลักของ Doctrine คือ:
- doctrine/orm: Package หลักของ Doctrine ORM
- doctrine/dbal: Doctrine Database Abstraction Layer ซึ่งเป็น layer ที่ Doctrine ใช้ในการติดต่อกับฐานข้อมูลต่างๆ (เช่น MySQL, PostgreSQL, SQLite)
เมื่อ Composer ทำงานเสร็จเรียบร้อยแล้ว คุณจะเห็น directory vendor ถูกสร้างขึ้นใน directory ของโปรเจกต์ ซึ่งภายใน directory นี้จะมี library ต่างๆ ที่ Composer ได้ download มาให้เรา รวมถึง Doctrine ด้วย
กรณีใช้งานจริงและข้อผิดพลาดที่พบบ่อย:
- ปัญหา: Composer ไม่รู้จักคำสั่ง
composerวิธีแก้ไข: ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Composer อย่างถูกต้อง และได้เพิ่ม Composer ลงใน
PATHของระบบปฏิบัติการแล้ว - ปัญหา: Composer download library ไม่สำเร็จ (เช่น error network)
วิธีแก้ไข: ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของคุณ และลองรันคำสั่ง
composer updateอีกครั้ง
การตั้งค่า Database Connection
หลังจากที่เราติดตั้ง Doctrine เรียบร้อยแล้ว ขั้นตอนต่อไปคือการตั้งค่าการเชื่อมต่อกับฐานข้อมูลของเรา เราจะต้องบอกให้ Doctrine รู้ว่าเราต้องการเชื่อมต่อกับฐานข้อมูลอะไร, hostname, username, password และชื่อฐานข้อมูล
โดยปกติแล้ว เราจะสร้างไฟล์ config เพื่อเก็บข้อมูลการเชื่อมต่อฐานข้อมูลนี้ไว้ ตัวอย่างเช่น config/doctrine.php:
<?php
use Doctrine\DBAL\DriverManager;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\ORMSetup;
// ข้อมูลการเชื่อมต่อฐานข้อมูล
$dbParams = [
'driver' => 'pdo_mysql', // หรือ pdo_pgsql, pdo_sqlite แล้วแต่ฐานข้อมูลที่ใช้
'user' => 'db_user',
'password' => 'db_password',
'dbname' => 'db_name',
'host' => 'localhost', // หรือ IP address ของ database server
];
$config = ORMSetup::createAnnotationMetadataConfiguration(
[__DIR__."/../src/Entity"], // Paths to your entities
true, // isDevMode
null, // Proxy directory (optional)
null, // Cache implementation (optional)
false // use Simple Annotation Reader
);
$conn = DriverManager::getConnection($dbParams, $config);
// obtaining the entity manager
$entityManager = new EntityManager($conn, $config);
return $entityManager;
คำอธิบายโค้ด:
$dbParams: Array ที่เก็บข้อมูลการเชื่อมต่อฐานข้อมูล เช่นdriver(ชนิดของฐานข้อมูล),user(username),password(password),dbname(ชื่อฐานข้อมูล),host(hostname หรือ IP address ของ database server)ORMSetup::createAnnotationMetadataConfiguration(): สร้าง configuration object สำหรับ Doctrine โดยระบุ directory ที่เก็บ Entity ของเรา (ในตัวอย่างคือsrc/Entity), mode การพัฒนา (trueสำหรับ development mode,falseสำหรับ production mode) และอื่นๆDriverManager::getConnection(): สร้าง connection object โดยใช้ข้อมูลใน$dbParamsและ$confignew EntityManager(): สร้าง EntityManager object ซึ่งเป็น object หลักที่เราจะใช้ในการจัดการ database operation ต่างๆ
กรณีใช้งานจริงและข้อผิดพลาดที่พบบ่อย:
- ปัญหา: Doctrine ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้ (เช่น error connection refused)
วิธีแก้ไข: ตรวจสอบให้แน่ใจว่าข้อมูลการเชื่อมต่อฐานข้อมูลใน
$dbParamsถูกต้อง (username, password, hostname, ชื่อฐานข้อมูล) และ database server กำลังทำงานอยู่ - ปัญหา: Driver ของฐานข้อมูลที่ใช้ไม่ถูกต้อง (เช่น ใช้
pdo_mysqlแต่ไม่ได้ติดตั้ง extensionpdo_mysql)วิธีแก้ไข: ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง extension ของ PHP ที่จำเป็นสำหรับฐานข้อมูลที่คุณใช้ (เช่น
pdo_mysqlสำหรับ MySQL,pdo_pgsqlสำหรับ PostgreSQL)
Entity Manager
Entity Manager คือหัวใจสำคัญของ Doctrine ORM ครับ มันเป็น object ที่รับผิดชอบในการจัดการ lifecycle ของ Entity (เช่น การสร้าง, การอ่าน, การแก้ไข, การลบ) และการ synchronise Entity กับ table ในฐานข้อมูล
ในไฟล์ config/doctrine.php ที่เราสร้างไว้ เราได้สร้าง EntityManager object ขึ้นมาแล้ว:
$entityManager = new EntityManager($conn, $config);
เราสามารถนำ EntityManager object นี้ไปใช้งานในส่วนต่างๆ ของโปรเจกต์ของเราได้ โดยการ include หรือ require ไฟล์ config/doctrine.php เข้าไป:
<?php
require_once __DIR__ . "/../vendor/autoload.php"; // Load Composer's autoloader
$entityManager = require_once __DIR__ . "/config/doctrine.php";
// ตอนนี้เราสามารถใช้ $entityManager ได้แล้ว
// ตัวอย่าง: สร้าง Entity object
// ...
สรุป: ในบทนี้เราได้เรียนรู้วิธีการติดตั้งและตั้งค่า Doctrine ORM โดยเริ่มจากการทำความเข้าใจเกี่ยวกับ Composer, การติดตั้ง Doctrine ผ่าน Composer, การตั้งค่า database connection และการสร้าง EntityManager object ในบทต่อไป เราจะมาเรียนรู้วิธีการสร้าง Entity และ mapping object กับ table ในฐานข้อมูลกันครับ