ข้ามไปยังเนื้อหาหลัก
คู่มือระบบ เนื้อหาผ่านการตรวจสอบแล้ว

การติดตั้งและตั้งค่า ORM Framework (ตัวอย่าง: Doctrine)

บทนี้จะอธิบายขั้นตอนการติดตั้งและตั้งค่า Doctrine ORM framework โดยเริ่มจากการติดตั้ง Composer ซึ่งเป็น dependency manager สำหรับ PHP จากนั้นจะสอนวิธีการติดตั้ง...

การติดตั้งและตั้งค่า 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 และ $config
  • new EntityManager(): สร้าง EntityManager object ซึ่งเป็น object หลักที่เราจะใช้ในการจัดการ database operation ต่างๆ

กรณีใช้งานจริงและข้อผิดพลาดที่พบบ่อย:

  • ปัญหา: Doctrine ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้ (เช่น error connection refused)

    วิธีแก้ไข: ตรวจสอบให้แน่ใจว่าข้อมูลการเชื่อมต่อฐานข้อมูลใน $dbParams ถูกต้อง (username, password, hostname, ชื่อฐานข้อมูล) และ database server กำลังทำงานอยู่

  • ปัญหา: Driver ของฐานข้อมูลที่ใช้ไม่ถูกต้อง (เช่น ใช้ pdo_mysql แต่ไม่ได้ติดตั้ง extension pdo_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 ในฐานข้อมูลกันครับ

Office.in.th Custom Service

ต้องการพัฒนาระบบหรือปรับแต่งจากโครงสร้างนี้?

Office.in.th รับพัฒนาและออกแบบ Enterprise Web Application, API Integration และระบบบริหารงานภาครัฐ/เอกชน พร้อมการสนับสนุนระยะยาว

ดูบริการรับพัฒนาซอฟต์แวร์