zf3belcebur/doctrine-orm-resources

此包已被废弃,不再维护。未建议替代包。

DoctrineORM 资源到 ZF3

v1.0.4 2019-11-04 12:38 UTC

This package is auto-updated.

Last update: 2022-08-04 18:54:36 UTC


README

DoctrineORMResources

整合不同模块,为 DoctrineORM & ZF3 提供新资源

查看

安装

此模块的安装使用 composer。有关 composer 文档,请参阅 getcomposer.org

composer require zf3belcebur/doctrine-orm-resources

然后,将 ZF3Belcebur\DoctrineORMResources 添加到您的 config/application.config.php

实体特性

  • ZF3\DoctrineORMResources\EntityTrait\Coordinates
    • 纬度和经度字段
  • ZF3\DoctrineORMResources\EntityTrait\GedmoEntityTranslatable
    • Gedmo 区域字段
  • ZF3\DoctrineORMResources\EntityTrait\Timestamp
    • 使用 Gedmo Timestampable 的 modified_at 和 created_at 字段

通过 \ZF3Belcebur\DoctrineORMResources\Repository\BaseEntityRepository 扩展您的存储库

扩展 Doctrine\ORM\EntityRepository 以访问使用 Zend\Http\PhpEnvironment\RequestZend\Mvc\I18n\Router\TranslatorAwareTreeRouteStackZend\Router\RouteMatchZend\Router\RouteStackInterface,并使用新的方法 findByQb

return [
'doctrine' => [
    'configuration' => [
        'orm_default' => [
            'class_metadata_factory_name' => ClassMetadataFactory::class,
            'repository_factory' => BaseRepository::class,
        ]
    ]
];

存储库后构造事件

  • 如果您需要在存储库的 __construct 之后执行某些操作,则需要扩展您的存储库类 ZF3Belcebur\DoctrineORMResources\Repository\BaseEntityRepository 并实现 ZF3Belcebur\DoctrineORMResources\Repository\PostConstructInterface

如何将 GedmoSortableListener 集成到您的存储库中

  • 在您的配置中启用 Sortable Listener
return [
    'doctrine' => [
        'eventmanager' => [
            'orm_default' => [
                'subscribers' => [
                    TranslatableListener::class,
                    TimestampableListener::class,
                    SortableListener::class,
                ],
            ],
        ],
    ],
];
  • 在您的存储库中实现 PostConstructInterface 事件,使用 ZF3Belcebur\DoctrineORMResources\RepositoryTrait\SortableListenerAdapterTrait
/**
 * CustomRepo
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class CustomRepo extends BaseEntityRepository implements PostConstructInterface
{
    use \ZF3Belcebur\DoctrineORMResources\RepositoryTrait\SortableListenerAdapterTrait;
    
    public function postConstruct(): void
    {
        $this->initListenerConfig();
    }
}

新方法 getEntityAlias()

    // Entity --> Application\Entity\Admin1
   echo $admin1Repo->getEntityAlias(); // --> "a" 

新方法 getQueryWithGedmoTranslation()

此方法将 Gedmo Walkers 和 Hints 应用于查询,从参数中获取默认Locale 或在 routeMatch 参数定义中查找 "locale"

   public function getQueryWithGedmoTranslation(QueryBuilder $qb, string $locale = null, string $defaultLocale = null): Query

新方法 findByQb()

定义

   public function findByQb(array $criteria, array $orderBy = [], int $limit = null, int $offset = null, string $alias = null): QueryBuilder;

示例

$admin1sQb = $admin1Repo->findByQb(['country' => $country], ['name' => 'ASC']);
$criteria =
    [
        'orX' => [
            [
                'operator' => 'like',
                'value' => '%espa%',
                'field' => 'name',
            ],
            [
                'operator' => 'like',
                'value' => '%espa%',
                'field' => 'slugName',
            ],
            'andX' => [
                [
                    'operator' => 'eq',
                    'value' => '%espa%',
                    'field' => 'name',
                ],
                [
                    'operator' => 'isNull',
                    'field' => 'slugName',
                ],
            ],
        ],
        [
            'operator' => 'like',
            'value' => '%cosas%',
            'field' => 'slug',
        ],
    ];
   $admin1sQb = $admin1Repo->findByQb($criteria);

验证器

  • NoObjectExist 允许在验证器中使用多个字段
  • UniqueObject 允许在验证器中使用多个字段

Gedmo 性能可翻译

步行者

扩展 GedmoTranslationWalker 以仅执行必要的查询连接

自定义 class_metadata_factory_name ZF3Belcebur\DoctrineORMResources\ORM\Mapping\ClassMetadata

return [
    __NAMESPACE__ => [
        'gedmo' => [
            'custom_translation_classes' => [
                // 'YourNameSpace\CustomEntityTranslation1',
                // 'YourNameSpace\CustomEntityTranslation2',
                // 'YourNameSpace\CustomEntityTranslation3',
            ]
        ]
    ],
    'doctrine' => [
        'configuration' => [
            'orm_default' => [
                'class_metadata_factory_name' => ClassMetadataFactory::class,
            ]
        ]
    ]
];

默认配置

参见 module.config.php

namespace ZF3Belcebur\DoctrineORMResources;

return [
    __NAMESPACE__ => [
        'gedmo' => [
            'custom_translation_classes' => [
                // 'YourNameSpace\CustomEntityTranslation'
            ]
        ]
    ],
    'service_manager' => [
        'factories' => [
            BaseRepository::class => BaseRepositoryFactory::class,
        ],
    ],
    'doctrine' => [
        'eventmanager' => [
            'orm_default' => [
                'subscribers' => [
                    TranslatableListener::class,
                    TimestampableListener::class,
                    //SortableListener::class,
                ],
            ],
        ],
        'driver' => [
            'translatable_orm_metadata_driver' => [
                'class' => AnnotationORMDriver::class,
                'cache' => 'array',
                'paths' => [
                    getcwd() . '/vendor/gedmo/doctrine-extensions/src/Translatable/Entity',
                ],
            ],
            'orm_default' => [
                'drivers' => [
                    'Gedmo\Translatable\Entity' => 'translatable_orm_metadata_driver',
                ],
            ],
        ],
        'configuration' => [
            'orm_default' => [
                'class_metadata_factory_name' => ClassMetadataFactory::class,
                'repository_factory' => BaseRepository::class,
                'types' => [
                    'point' => PointType::class,
                    'carbondate' => CarbonDateType::class,
                    'carbontime' => CarbonTimeType::class,
                    'linestring' => LineStringType::class,
                    'polygon' => PolygonType::class,
                    'multipolygon' => MultiPolygonType::class,
                ],
                'datetime_functions' => [
                    'date' => Date::class,
                    'date_format' => DateFormat::class,
                    'dateadd' => DateAdd::class,
                    'datediff' => DateDiff::class,
                    'day' => Day::class,
                    'dayname' => DayName::class,
                    'last_day' => LastDay::class,
                    'minute' => Minute::class,
                    'second' => Second::class,
                    'strtodate' => StrToDate::class,
                    'time' => Time::class,
                    'timestampadd' => TimestampAdd::class,
                    'timestampdiff' => TimestampDiff::class,
                    'week' => Week::class,
                    'weekday' => WeekDay::class,
                    'year' => Year::class,
                ],
                'numeric_functions' => [
                    'acos' => Acos::class,
                    'asin' => Asin::class,
                    'atan2' => Atan2::class,
                    'atan' => Atan::class,
                    'cos' => Cos::class,
                    'cot' => Cot::class,
                    'hour' => Hour::class,
                    'pi' => Pi::class,
                    'power' => Power::class,
                    'quarter' => Quarter::class,
                    'rand' => Rand::class,
                    'round' => Round::class,
                    'sin' => Sin::class,
                    'std' => Std::class,
                    'tan' => Tan::class,
                    'st_contains' => STContains::class,
                    'contains' => Contains::class,
                    'st_area' => Area::class,
                    STDistanceSphere::FUNCTION_NAME => STDistanceSphere::class,
                    'ST_Distance' => STDistance::class,
                    'GeomFromText' => GeomFromText::class,
                    'st_intersects' => STIntersects::class,
                    'st_buffer' => STBuffer::class,
                    'Point' => Point::class,
                    'GLength' => GLength::class,
                    'LineString' => LineString::class,
                    'LineStringFromWKB' => LineStringFromWKB::class,
                ],
                'string_functions' => [
                    'binary' => Binary::class,
                    'char_length' => CharLength::class,
                    'concat_ws' => ConcatWs::class,
                    'countif' => CountIf::class,
                    'crc32' => Crc32::class,
                    'degrees' => Degrees::class,
                    'field' => Field::class,
                    'find_in_set' => FindInSet::class,
                    'group_concat' => GroupConcat::class,
                    'ifelse' => IfElse::class,
                    'ifnull' => IfNull::class,
                    'match_against' => MatchAgainst::class,
                    'md5' => Md5::class,
                    'month' => Month::class,
                    'monthname' => MonthName::class,
                    'nullif' => NullIf::class,
                    'radians' => Radians::class,
                    'regexp' => Regexp::class,
                    'replace' => Replace::class,
                    'sha1' => Sha1::class,
                    'sha2' => Sha2::class,
                    'soundex' => Soundex::class,
                    'uuid_short' => UuidShort::class,
                ],
            ],
        ],
    ],
];