jimmeak/doctrine-bundle

使用 Doctrine 在开发 Symfony 项目时使生活更加轻松,同时需要更复杂的数据库实体

3.0.1 2024-04-08 20:56 UTC

This package is auto-updated.

Last update: 2024-09-08 21:58:20 UTC


README

此包是为了帮助许多使用 Doctrine 且需要更复杂数据库实体的 Symfony 项目而创建的。您可以使用许多预定义的 PHP 特性,还可以使用包含 createdAtupdatedAt 的映射超类,并通过 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],
]

使用方法

在创建数据库实体对象时,您可以使用如 FirstNameLastName 这样的特性。

// 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'