jimmeak / doctrine-bundle
使用 Doctrine 在开发 Symfony 项目时使生活更加轻松,同时需要更复杂的数据库实体
3.0.1
2024-04-08 20:56 UTC
Requires
- php: ^8.3
- doctrine/doctrine-bundle: ^2.9
- doctrine/orm: ^2.15|^3.0
- gedmo/doctrine-extensions: ^3.11
- stof/doctrine-extensions-bundle: ^1.8
- symfony/string: ^6.3|^7.0
- symfony/uid: ^6.3|^7.0
README
此包是为了帮助许多使用 Doctrine 且需要更复杂数据库实体的 Symfony 项目而创建的。您可以使用许多预定义的 PHP 特性,还可以使用包含 createdAt 或 updatedAt 的映射超类,并通过 Gedmo Doctrine 扩展来实现。
安装
您需要使用 PHP 8.2 来运行此包,因为它包含新的只读类语法。
如果您使用 Symfony Flex,只需运行 composer require 命令即可。
composer require jimmeak/doctrine-bundle
如果您在 Symfony 应用程序中没有使用 flex,请确保已注册该包。
// config/bundles.php <?php return [ ... Jimmeak\DoctrineBundle\JimmeakDoctrineBundle::class => ['all' => true], ]
使用方法
在创建数据库实体对象时,您可以使用如 FirstName 或 LastName 这样的特性。
// src/Entity/SomeEntity.php <?php use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] class Person { # Creating autogenerated UUID v7 use \Jimmeak\DoctrineBundle\Trait\UuidV7 # Giving Person FirstName attribute, getter and setter. use \Jimmeak\DoctrineBundle\Trait\FirstName; # Giving Person LastName attribute, getter and setter. use \Jimmeak\DoctrineBundle\Trait\LastName; } #[ORM\Entity] class User { # Creating autogenerated UUID v7 use \Jimmeak\DoctrineBundle\Trait\UuidV7 # Giving Entity User First name, Last name, getters and setters # Giving Entity User one additional getter for Full name # with optional reverse possibility use \Jimmeak\DoctrineBundle\Trait\FullName; }
此 Doctrine 包还包含表名监听器。它可以根据此类规则创建数据库表名,并接受一个名称解析接口。默认的 NameResolver 根据命名空间层次结构创建表名。所有设置都可以在配置文件中完成。
jimmeak_doctrine: # Values below are default values set in DependencyInjection/Configuration.php table_name_listener: # Listener will create new structure of table names based on class Namespaces allow: false # If "allow" is set as true, in this node must be specified the entity namespace # Default value is set to App, but it will vary from project to project according to ORM Mapping # set in config/packages/doctrine.yaml entity_namespace: App # Service has to be registered in container and be name_resolver: null
创建自己的名称解析器
您需要记住的唯一重要的事情是实现正确的接口。创建自己的服务。
// src/Resolver/MyOwnDoctrineNameResolver.php <?php namespace Resolver; use Jimmeak\DoctrineBundle\Resolver\NameResolverInterface; class MyOwnDoctrineNameResolver implements NameResolverInterface { public function name(string $namespace, string $prefix): string { // return your table name based on namespace and prefix } public function manyToManyName(string $sourceEntityNamespace, string $targetEntityNamespace, string $prefix): string { // return your table name for joining table (relation many to many) // having source and target entity namespaces and prefix. } }
然后不要忘记打开表名监听器,并给它您的服务。
jimmeak_doctrine: table_name_listener: allow: true name_resolver: 'Resolver\MyOwnDoctrineNameResolver'