opensolutions / doctrine2bridge
将Doctrine2的强大功能添加到Laravel 4(支持SQL日志和认证)
Requires
- php: >=5.3.0
- doctrine/migrations: 1.0.*@dev
- doctrine/orm: 2.*
README
将Doctrine2的强大功能添加到Laravel 4(包括认证和SQL查询日志支持)。
Laravel的Eloquent ORM适合轻量级使用,然而在需要更全面功能的ORM时,很少有能超越Doctrine的。
这是一个将Doctrine 2.x集成到Laravel 4.x的composer包。Doctrine的EntityManager实例可以通过名为D2EM
的外观类访问,缓存可以直接通过D2Cache
访问。
元数据目前通过XML驱动程序获取。应该很容易添加其他驱动程序。
还通过Auth/Doctrine2UserProvider
类提供了认证支持。有关如何与Laravel自己的认证系统集成,请参阅此处文档。
安装
安装与Laravel包的常规方法相同。您可以在维基中找到如何安装和测试的详细说明。
在您的composer.json文件的包(require)部分中插入以下内容,并运行更新(composer update)
"opensolutions/doctrine2bridge": "2.4.*",
一般来说,我们将尝试匹配Doctrine的次要版本(2.4.x),但您应始终使用此版本的最新x
版本。
请注意,您的最低稳定性必须为dev
才能使用Doctrine迁移。如果上述命令报错,请确保您的composer.json文件中设置了以下内容
"minimum-stability": "dev"
将服务提供者添加到您的Laravel应用程序中的app/config/app.php
。在'providers'
数组中添加
'Doctrine2Bridge\Doctrine2CacheBridgeServiceProvider',
'Doctrine2Bridge\Doctrine2BridgeServiceProvider',
您需要公开并编辑配置文件
./artisan config:publish opensolutions/doctrine2bridge
这将获取配置文件的新副本,位于app
目录下
config/packages/vendor/opensolutions/doctrine2bridge
有关如何与Laravel自己的认证系统集成,请参阅此处文档。
使用方法
提供了两个外观类 - 一个用于Doctrine2缓存,另一个用于实体管理器。可以使用以下方式使用它们
D2Cache::save( $key, $value );
D2Cache::fetch( $key );
D2EM::persist( $object );
D2EM::flush();
$users = D2EM::getRepository( 'Entities\User' )->findAll();
更详细的使用方法
配置文件默认期望在doctrine/schema
下找到XML模式定义。例如,我们可能有一个名为doctrine/schema/Entities.SampleEntity.dcm.xml
的单个模式文件,包含以下内容:
<?xml version="1.0"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xsi="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Entities\SampleEntity" repository-class="Repositories\Sample">
<id name="id" type="integer">
<generator strategy="AUTO"/>
</id>
<field name="name" type="string" length="255" nullable="true"/>
</entity>
</doctrine-mapping>
假设您已配置了数据库连接参数并在项目基本目录下定位,我们可以使用以下方式创建实体、代理和仓库
./vendor/bin/doctrine2 orm:generate-entities app/models/
./vendor/bin/doctrine2 orm:generate-proxies
./vendor/bin/doctrine2 orm:generate-repositories app/models/
您也可以(删除并)创建数据库
./vendor/bin/doctrine2 orm:schema-tool:drop --force
./vendor/bin/doctrine2 orm:schema-tool:create
现在您可以向数据库添加一些数据
$se = new Entities\SampleEntity;
$se->setName( rand( 0, 100 ) );
D2EM::persist( $se );
D2EM::flush();
并查询它
echo count( D2EM::getRepository( 'Entities\SampleEntity' )->findAll() );
我使用优秀的ORM Designer来创建和管理我的XML模式文件。
为仓库提供的便捷函数
如果您,像我一样,花很多时间输入D2EM::getRepository( 'Entities\XXX' )
,请将以下内容添加到bootstrap/start.php
的末尾
include $app['path.base'] . '/vendor/opensolutions/doctrine2bridge/src/bootstrap/d2r.php';
然后你可以用以下代码替换上面的内容:D2R( 'XXX' )
。我通常使用Entities作为命名空间,所以这个函数如下所示(你可以轻松地根据自己的需求进行修改)
function D2R( $entity, $namespace = 'Entities' )
{
return D2EM::getRepository( $namespace . '\\' . $entity );
}
SQL查询日志
该包包括了一个Doctrine\DBAL\Logging\SQLLlogger
的实现,它会计算查询时间,并调用Laravel的日志外观来记录查询执行时间和SQL查询。
可以在配置文件中启用此日志记录器。
## 许可证
像Laravel框架本身一样,该项目在MIT许可证下开源。