stargazer-team / yii-doctrine
Yii3 integration Doctrine extension
Requires
- php: >=8.1.0
- doctrine/migrations: ^3.7.4
- doctrine/orm: ^3.1.3
- psr/cache: ^2.0|^3.0
- psr/log: ^2|^3
- symfony/cache: ^6.4.7
- yiisoft/aliases: ^3.0
- yiisoft/config: ^1.5
- yiisoft/definitions: ^3.3
- yiisoft/injector: ^1.2
- yiisoft/yii-console: ^2.2.0
Requires (Dev)
- rector/rector: ^0.15.25
- roave/infection-static-analysis-plugin: ^1.29
- vimeo/psalm: ^4.30|^5.9
This package is not auto-updated.
Last update: 2024-05-07 21:58:50 UTC
README
Yii3 Doctrine Extension
Installation
The preferred way to install this extension is through composer:
composer require stargazer-team/yii-doctrine
Basic Usage
Configuration params doctrine: dbal, orm, migrations, fixture example config path example.php
DBAL
Create database:
php yii doctrine:database:create
Drop database:
php yii doctrine:database:drop --if-exists --force
Dynamic create connection:
final class ConnectionService { public function __construct( private readonly \Yiisoft\Yii\Doctrine\Dbal\Factory\DynamicConnectionFactory $dynamicConnectionFactory, private readonly \Yiisoft\Yii\Doctrine\DoctrineManager $doctrineManager, ) { } public function create(): void { $connectionModel = $this->dynamicConnectionFactory->createConnection( [ 'params' => [ 'driver' => 'pdo_pgsql', 'dbname' => 'dbname', 'host' => 'localhost', 'password' => 'secret', 'user' => 'postgres', ] ], 'postgres' ); } public function close(): void { $this->doctrineManager->closeConnection('postgres'); } }
Command:
- doctrine:dbal:run-sql
- doctrine:database:create
- doctrine:database:drop
ORM
If need default entity manager add on di.php
EntityManagerInterface::class => fn( DoctrineManager $doctrineManager ): EntityManagerInterface => $doctrineManager->getManager( $params['yiisoft/yii-doctrine']['orm']['default_entity_manager'] ?? DoctrineManager::DEFAULT_ENTITY_MANAGER ),
Use default entity manager:
final class TestController { public function __construct( private readonly \Doctrine\ORM\EntityManagerInterface $entityManager, ) { } }
If two or more entity manager use Yiisoft\Yii\Doctrine\Doctrine\DoctrineManager, find by name entity manager
final class Test2Controller { public function __construct( private readonly Yiisoft\Yii\Doctrine\DoctrineManager $doctrineManager, ) { } }
Dynamic create entity manager:
final class EntityManagerService { public function __construct( private readonly \Yiisoft\Yii\Doctrine\Orm\Factory\DynamicEntityManagerFactory $dynamicEntityManagerFactory, private readonly \Yiisoft\Yii\Doctrine\DoctrineManager $doctrineManager ) { } public function create(): void { $this->dynamicEntityManagerFactory->create( [ 'connection' => 'mysql', 'mappings' => [ 'Mysql' => [ 'dir' => '@common/Mysql', 'driver' => DriverMappingEnum::ATTRIBUTE_MAPPING, 'namespace' => 'Common\Mysql', ], ], ], [ 'namespace' => 'Proxies', 'path' => '@runtime/cache/doctrine/proxy', 'auto_generate' => true ], 'mysql' ); $entityManager = $this->doctrineManager->getManager('mysql'); } public function reset(): void { $this->doctrineManager->resetManager('mysql'); } public function close(): void { $this->doctrineManager->closeManager('mysql'); } }
Command:
- doctrine:orm:info
- doctrine:orm:generate-proxies
- doctrine:orm:mapping-describe
- doctrine:orm:run-dql
- doctrine:orm:validate-schema
- doctrine:orm:schema-tool:create
- doctrine:orm:schema-tool:drop
- doctrine:orm:schema-tool:update
Cache
Extension use psr6 cache implementation symfony cache.
Options add config on params.php
return [ 'yiisoft/yii-doctrine' => [ // Used symfony cache 'cache' => [ 'driver' => CacheAdapterEnum::ARRAY_ADAPTER, // only redis or memcached 'server' => [ 'host' => 'localhost', 'port' => 6379 ], 'namespace' => 'doctrine_', // only file cache driver 'path' => '@runtime/cache/doctrine', ], ];
Add on di.php configuration psr-6 cache
CacheItemPoolInterface::class => fn(CacheFactory $cacheFactory): CacheItemPoolInterface => $cacheFactory->create( $params['yiisoft/yii-doctrine']['cache'] ?? [] ),
or add di.php customer implementation
CacheItemPoolInterface::class => new \Symfony\Component\Cache\Adapter\ArrayAdapter(),
Command:
- doctrine:orm:clear-cache:metadata
- doctrine:orm:clear-cache:query
- doctrine:orm:clear-cache:result
Migrations
Create migration:
php yii doctrine:migrations:diff
Multi configuration
php yii doctrine:migrations:diff --configuration=mysql
Migrate
php yii doctrine:migrations:migrate
Command:
- doctrine:migrations:current
- doctrine:migrations:diff
- doctrine:migrations:dump-schema
- doctrine:migrations:execute
- doctrine:migrations:generate
- doctrine:migrations:latest
- doctrine:migrations:list
- doctrine:migrations:migrate
- doctrine:migrations:rollup
- doctrine:migrations:status
- doctrine:migrations:sync-metadata-storage
- doctrine:migrations:up-to-date
- doctrine:migrations:version
Fixture
If need fixture, install package
composer require stargazer-team/yii-doctrine-fixture --dev