jurosh / laravel-doctrine-forked
与 Laravel 5 熔合的 Doctrine 2 实现
Requires
- php: >=5.5.0
- doctrine/migrations: 1.*
- doctrine/orm: 2.5.*
- illuminate/support: 4.*|5.*
Requires (Dev)
- mockery/mockery: dev-master
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-18 09:51:35 UTC
README
laravel-doctrine的分支实现,与 Laravel 5 熔合。
文档
由于这是一个分支版本,该文档仍然适用于此包的大部分内容。请在使用此分支之前阅读原始文档和README。
分支更改、改进和功能
有什么新功能?
Laravel 5 支持修复
新功能
- 支持多个实体管理器,因此您可以使用不同的数据库连接(感谢 npmarrin!)
- 支持标准驱动程序和简单驱动程序(XML、YAML 或注释)(感谢 evopix!)
- 迁移和映射转换控制台命令(感谢 evopix!)
- sqlite 配置映射的前缀
- 添加了 cache:clear artisan 命令
- 使用注释对所有当前 doctrine 配置进行回退兼容
安装
首先通过 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许可证下授权。