zarganwar / php-di-nextras-orm-extension
此包的最新版本(1.0.0)没有可用的许可信息。
1.0.0
2024-01-04 17:46 UTC
Requires
- php: ^8.1
- ext-json: *
- nextras/orm: ^4.0
- php-di/php-di: ^7.0
README
创建您的模型类,请参阅 Nextras/Orm
实体
use Nextras\Orm\Entity\Entity; /** * @property-read int $id {primary} * @property string $name */ final class Account extends Entity { }
映射器
use \Nextras\Orm\Mapper\Mapper; final class AccountMapper extends Mapper { }
仓库
使用 RepositoryMapper
属性将仓库映射到映射器类
use Zarganwar\PhpDiNextrasOrmExtension\NextrasOrmPhpDiExtension\Attributes\RepositoryMapper; use Nextras\Orm\Repository\Repository; #[RepositoryMapper(AccountMapper::class)] final class AccountRepository extends Repository { public static function getEntityClassNames(): array { return [Account::class]; } }
模型
- 使用
ModelRepository
属性将仓库映射到模型类。 - 每个仓库都必须映射到模型类!
- 不要通过 Nextras/Orm - Nette 配置模型!
use Zarganwar\PhpDiNextrasOrmExtension\NextrasOrmPhpDiExtension\Attributes\ModelRepository; #[ModelRepository(AccountRepository::class, 'accounts')] // ... // ... final class Model extends \Nextras\Orm\Model\Model { }
注册扩展
使用 Config 类配置扩展
// config.php use Zarganwar\PhpDiNextrasOrmExtension\NextrasOrmPhpDiExtension\Config; use Zarganwar\PhpDiNextrasOrmExtension\NextrasOrmPhpDiExtension\OrmExtension; use Psr\Container\ContainerInterface; return [ // Configure extension Config::class => fn(ContainerInterface $c) => new Config( cacheDirectory: __DIR__ . '/../var/cache', modelClass: Model::class, connection: [/* See class PhpDoc */] ), // Register extension OrmExtension::class => fn(ContainerInterface $container) => new OrmExtension( $container, $container->get(Config::class), ), ];
在容器构建后调用 OrmExtension::register
方法
$containerBuilder = new DI\ContainerBuilder(); $containerBuilder->addDefinitions(__DIR__ . '/config.php'); $build = $containerBuilder->build(); $build->call([OrmExtension::class, 'register']);
享受
$container->get(AccountRepository::class)->findAll(); // Returns Nextras\Orm\Collection\ICollection