Zend Basic Tutorial
Zend Forms
Zend Database
Zend Advanced
Doctrine ORM (Object-Relational Mapper) is a powerful library for managing database operations using PHP objects instead of writing raw SQL.
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. |
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.Edit modules.config.php
: (config\modules.config.php)
return [ 'Laminas\Router', 'Laminas\Validator', 'DoctrineModule', 'DoctrineORMModule', 'Application', ];
Create a new folder under /data
:
mkdir data\Migrations
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', ], ], ], ], ];
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', ], ], ], ], ];
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', ], ], ], ], ];
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)) );
File create migrations.php
inside project folder
return [ 'table_storage' => [ 'table_name' => 'doctrine_migration_versions', ], 'migrations_paths' => [ 'Application\Migrations' => 'data/Migrations', ], ];