opensolutions/doctrine2bridge

将Doctrine2的强大功能添加到Laravel 4(支持SQL日志和认证)

v2.4.5 2014-04-26 08:34 UTC

This package is auto-updated.

Last update: 2024-09-19 05:20:31 UTC


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许可证下开源。