insidesuki / doctrine-manager
Doctrine 管理器
0.2.1
2022-06-25 09:08 UTC
Requires
- php: >=7.2
- doctrine/orm: ^2.11
- phpunit/phpunit: >=8
- symfony/framework-bundle: 5.4.*
README
简单的 doctrine 管理器,用于存储库。仅支持 XMLMapping。
EntityRepository 完全隔离,避免与 doctrine 产生耦合。
使用方法
- 创建一个继承自 Insidesuki\DoctrineManager\AbstractDoctrineRepository 的抽象类
use Insidesuki\DoctrineManager\AbstractDoctrineRepository;
abstract class ExampleRepository extends AbstractDoctrineRepository
{
/**
* @param string $entity entity to manage
* @throws ORMException
* Uses a settings php array
*/
public function __construct(string $entity)
{
$settings = require __DIR__ . '/../config/db_settings.php';
parent::__construct($entity, $settings['db_test']);
}
/**
* XML mapping
* @return string
*/
protected static function mapping(): string
{
return __DIR__ . '/../Mappings';
}
}
- 每个实体存储库必须继承自 ExampleRepository
通过重载构造函数,指定将管理存储库的实体。
class EstadoDoctrineRepository extends ExampleRepository { public function __construct() { parent::__construct(Entity::class); }
public function findById(int $id): ?Entity
{
return $this->find($id);
}
/**
* @throws \Doctrine\ORM\OptimisticLockException
* @throws \Doctrine\ORM\ORMException
*/
public function store(Entity $entity): Entity
{
$this->save($entity);
return $entity;
}
}
数据库设置示例
PHP 数组
<?php // /config/db_settings return [ 'db_test' => [ 'driver' => 'pdo_mysql', 'host' => 'any_host', 'port' => '3306', 'dbname' => 'db_name', 'user' => 'db_user', 'password' => 'db_pass' ] ];
或使用 .env 文件,随你喜欢(推荐)