Advertisement
Google Ad Slot: content-top
Zend Doctrine Introduction
What is Doctrine ORM?
Doctrine ORM (Object-Relational Mapper) is a powerful library for managing database operations using PHP objects instead of writing raw SQL.
Why Use Doctrine?
Feature |
Explanation |
|---|---|
Object Mapping |
Map database tables to PHP classes (Entities). |
Unit Testing |
Easier to test with object abstraction. |
Less SQL |
Reduces manual SQL queries. |
Migrations |
Manage DB schema changes using version control. |
Installing Doctrine ORM and Migrations
composer require doctrine/doctrine-module doctrine/doctrine-orm-module doctrine/migrations
These packages include:
DoctrineModule: Integration with Laminas (Zend).DoctrineORMModule: ORM functionality (entities, relations, DQL).Doctrine Migrations: For schema versioning.
Enable Doctrine Modules in Zend
Edit modules.config.php: (config\modules.config.php)
return [ 'Laminas\Router', 'Laminas\Validator', 'DoctrineModule', 'DoctrineORMModule', 'Application', ];
Create Migration Folder
Create a new folder under /data:
mkdir data\Migrations
Database Credentials Configuration (doctrine.global.php) (config\autoload\doctrine.global.php)
In Laminas, Doctrine database connection credentials are typically stored in a global config file called doctrine.global.php.
use Doctrine\DBAL\Driver\PDO\MySQL\Driver; return [ 'doctrine' => [ 'connection' => [ 'orm_default' => [ 'driverClass' => Driver::class, 'params' => [ 'host' => '127.0.0.1', 'port' => '3306', 'user' => 'root', 'password' => '', 'dbname' => 'zend', 'charset' => 'utf8mb4', ], ], ], ], ];
Configure Doctrine Driver (Entity Mapping) (module/Application/config/module.config.php)
return [ 'doctrine' => [ 'driver' => [ 'application_entities' => [ 'class' => Doctrine\ORM\Mapping\Driver\AnnotationDriver::class, 'cache' => 'array', 'paths' => [__DIR__ . '/../src/Entity'], ], 'orm_default' => [ 'drivers' => [ 'Application\Entity' => 'application_entities', ], ], ], ], ];
Configure Doctrine Driver (Entity Mapping) (module/Application/config/module.config.php)
return [ 'doctrine' => [ 'driver' => [ 'application_entities' => [ 'class' => Doctrine\ORM\Mapping\Driver\AnnotationDriver::class, 'cache' => 'array', 'paths' => [__DIR__ . '/../src/Entity'], ], 'orm_default' => [ 'drivers' => [ 'Application\Entity' => 'application_entities', ], ], ], ], ];
Setup CLI for Migrations
File create cli-config.php inside project folder
use Doctrine\Migrations\DependencyFactory;
use Doctrine\Migrations\Configuration\Migration\PhpFile;
use Doctrine\Migrations\Configuration\EntityManager\ExistingEntityManager;
require 'vendor/autoload.php';
$container = require 'config/container.php';
return DependencyFactory::fromEntityManager(
new PhpFile('migrations.php'),
new ExistingEntityManager($container->get(\Doctrine\ORM\EntityManager::class))
);
Define Migrations Config
File create migrations.php inside project folder
return [ 'table_storage' => [ 'table_name' => 'doctrine_migration_versions', ], 'migrations_paths' => [ 'Application\Migrations' => 'data/Migrations', ], ];