jurosh/laravel-doctrine-forked

与 Laravel 5 熔合的 Doctrine 2 实现

0.5.0 2014-09-22 10:29 UTC

README

laravel-doctrine的分支实现,与 Laravel 5 熔合。

文档

由于这是一个分支版本,该文档仍然适用于此包的大部分内容。请在使用此分支之前阅读原始文档README

分支更改、改进和功能

  1. 有什么新功能?
  2. 安装
  3. 使用不同的元数据驱动程序
  4. 使用多个实体管理器
  5. 使用 DoctrineExtensions
  6. 新的 Doctrine 配置参考
  7. 问题和贡献

有什么新功能?

Laravel 5 支持修复

新功能

安装

首先通过 Composer 安装此包。编辑您的项目 composer.json 文件,将 mitchellvanw/laravel-doctrine 添加为依赖项。

"require": {
    "mitchellvanw/laravel-doctrine": "dev-l5",
    "doctrine/orm": "2.5.*@dev"
},
  "repositories": [
    {
      "type": "git",
      "url": "https://github.com/FoxxMD/laravel-doctrine.git"
    }
  ]

接下来,在终端中使用 Composer 更新您的项目

php composer.phar update

注意事项

目前 Doctrine\ORM 版本 2.5 仍处于测试版。因此,composer 安装可能需要您将 composer.json 中的 minimum-stability 改为 dev

如果您不想影响其他包的稳定性,您可以在 composer.json 中添加以下属性

"prefer-stable": true

安装包后,您需要添加服务提供程序。打开您的 app/config/app.php 配置文件,并在 providers 数组中添加一个新条目。

'Mitch\LaravelDoctrine\LaravelDoctrineServiceProvider'

之后,您需要添加外观。打开您的 app/config/app.php 配置文件,并在 aliases 数组中添加一个新条目。

'EntityManager' => 'Mitch\LaravelDoctrine\EntityManagerFacade',
'RegistryManager' => 'Mitch\LaravelDoctrine\RegistryManagerFacade'

建议发布包配置。

php artisan config:publish mitchellvanw/laravel-doctrine --path=vendor/mitchellvanw/laravel-doctrine/config

## 使用不同的元数据驱动程序

Doctrine提供了几个驱动程序,可以将表信息映射到实体类。更多详细信息请参阅Doctrine参考指南的第19、20和21节

默认的Doctrine配置将使用注解驱动程序。这是laravel-doctrine默认的工作方式。如果这对你来说足够了,你可以继续使用laravel-doctrine的wiki中提供的文档。

要使用不同的驱动程序,请编辑你想要使用该驱动程序的实体管理器的metadata属性(在doctrine.config中)

'entity_managers' => [
    'default' => [
        ...
        'metadata' => [
            'simple' => false,
            'driver' => 'yaml', //xml or yaml or annotation (ANNOTATION IS DEFAULT)
            'paths' => [
                base_path('app/Models/mappings') //all base paths to mapping directories go here
            ],
            'extension' => '.dcm.yml' //extension for mapping files if not using simple driver
        ],
    ],
  ]

有关如何设置每个驱动程序的说明,请参阅Doctrine参考指南。

##使用多个实体管理器

如果你使用常规的EntityManager外观,你将接收到在 doctrine 配置中定义的default EM。要使用多个实体管理器

  • 使用RegistryManager外观,或者
  • ManagerRegistry注入到你的控制器中

使用外观

use RegistryManager;
public function __construct()
{
    parent::__construct();
    $this->_em = RegistryManager::getManager('tracking'); //gets 'tracking' EM
    $this->_em = RegistryManager::getManager(); //gets 'default' EM

    $this->inventoryRepo = $this->_em->getRepository('app\Models\Inventory');
}

使用DI

public function __construct(ManagerRegistry $reg)
{
    parent::__construct();
    $this->_em = $reg->getManager('tracking'); //gets 'tracking' EM
    $this->_em = $reg->getManager(); //gets 'default' EM

    $this->inventoryRepo = $this->_em->getRepository('app\Models\Inventory');
}

使用 DoctrineExtensions

DoctrineExtensions是Doctrine 2的一组扩展,它增加了对MySQL和Oracle中可用的额外查询功能的支持。要了解更多关于添加了哪些额外功能的信息,请访问该包的github页面

要使用DoctrineExtensions,请使用composer安装该包

composer require beberlei/DoctrineExtensions

配置扩展非常简单,遵循DoctrineExtensions在其自己的配置中使用的模式。在你的doctrine配置中,只需为每个你想从扩展中访问的实体管理器添加一个dql数组,或者将数组添加到配置的顶层,以便将其应用于所有实体管理器。

'dql' => [
    'numeric_functions' => [
        'ROUND' => 'DoctrineExtensions\Query\Mysql\Round',
        'POWER' => 'DoctrineExtensions\Query\Mysql\Power'
        ...
    ],
    'string_functions' => [
        'REPLACE' => 'DoctrineExtensions\Query\Mysql\Replace'
        ...
    ],
    'datetime_functions' => [
        'DATE' => 'DoctrineExtensions\Query\Mysql\Date'
        ...
    ]
]

就是这样!像平时一样使用DoctrineExtensions。

新的 Doctrine 配置参考

一个完整的示例配置文件,利用所有新功能,带有注释。

return [
    'default_connection' => 'default',
    'entity_managers' => [
        'default' => [ //MUST have an entity_managers entry for 'default'
            'connection' => 'rdsConnection',
            'cache_provider' => null,
            'repository' => 'Doctrine\ORM\EntityRepository',
            'logger' => null,
            'metadata' => [
                'simple' => false,
                'driver' => 'yaml', //xml or yaml or annotation (ANNOTATION IS DEFAULT)
                'paths' => [
                    base_path('app/Models/mappings') //all base paths to mapping directories go here
                ],
                'extension' => '.dcm.yml' //extension for mapping files if not using simple driver
            ],
            //Only usable if DoctrineExtensions is installed
            /*'dql' => [
                'numeric_functions' => [
                    'ROUND' => 'DoctrineExtensions\Query\Mysql\Round',
                    'POWER' => 'DoctrineExtensions\Query\Mysql\Power'
                    ...
                ],
                'string_functions' => [
                    'REPLACE' => 'DoctrineExtensions\Query\Mysql\Replace'
                    ...
                ],
                'datetime_functions' => [
                    'DATE' => 'DoctrineExtensions\Query\Mysql\Date'
                    ...
                ]
            ]*/
        ],
        'tracking' => [
            'connection' => 'trackingConnection',
            'cache_provider' => null,
            'repository' => 'Doctrine\ORM\EntityRepository',
            'simple_annotations' => false,
            'logger' => null,
            'metadata' => [
                'simple' => false,
                'driver' => 'annotation'
                //paths is not necessary for annotation
            ],
        ],
    ],
    'proxy' => [
        'auto_generate' => true, //create proxy files automatically (turn off for production)
        'directory' => base_path('storage/proxies'), //store them outside of default directory
        'namespace' => null
    ],
    //'cache_provider' => 'apc',
    //'logger' => new \Doctrine\DBAL\Logging\EchoSQLLogger()
    //'dql' => ...
];

#问题和贡献

有问题吗?

如果你有与这个分支版本中做出的更改相关的问题,请在这个存储库上打开一个问题。

如果你的问题是通用的或者与原始仓库中的功能相关,请在那里提出问题

贡献和分支状态

这个分支不是Laravel 5的官方laravel-doctrine实现,所以我不能保证它会继续工作,或者在未来Laravel发生变化时会被维护,然而,我每天都在使用它来处理生产代码,所以只要它对我相关,我会保持它的更新。

我很高兴接受来自社区的PR和其他贡献,并且会及时回应。我也愿意接受合作者。

许可协议

此软件包在MIT许可证下授权。