opensolutions/doctrine2bridge-l5

为 Laravel 5 添加 Doctrine2 的功能(支持 SQL 记录和身份验证)

v2.4.3 2015-07-16 11:39 UTC

This package is auto-updated.

Last update: 2024-09-19 05:08:25 UTC


README

Laravel 5 的 Doctrine2Bridge

为 Laravel 5 添加 Doctrine2 的功能(包括身份验证和 SQL 查询记录支持)。

有关 Laravel 4 的信息,请参阅 opensolutions/doctrine2bridge

Laravel 的 Eloquent ORM 适用于快速开发,并且活跃模型模式很好。然而,当您需要更完整的 ORM 功能时,几乎没有东西能打败 Doctrine2。

这是一个将 Doctrine 2.x 与 Laravel 5.x 集成的 composer 包。可以通过名为 D2EM 的外观访问 Doctrine 的 EntityManager 实例,并通过 D2Cache 直接访问缓存。

当前通过 XML 驱动程序 获取元数据。很容易添加额外的驱动程序。

通过 Auth/Doctrine2UserProvider 类也包含了身份验证支持。有关如何与 Laravel 自身的身份验证系统集成的说明,请参阅此处

安装

安装是 Laravel 包的常规操作。您可以在 wiki 中找到有关如何安装和测试的详细说明版本 此处

在您的 composer.json 文件的 packages (require) 部分中插入以下内容,并运行更新 (composer update)

"opensolutions/doctrine2bridge-l5": "2.4.*",

一般来说,我们会尝试将我们的次要版本(2.4.x)与 Doctrine 的版本相匹配,但您应该始终使用此包的最新 x 版本。

将服务提供者添加到您的 Laravel 应用程序中 app/config/app.php。在 'providers' 数组中添加

'Doctrine2Bridge\Doctrine2CacheBridgeServiceProvider',
'Doctrine2Bridge\Doctrine2BridgeServiceProvider',

您需要发布并编辑配置文件

./artisan vendor:publish --provider "Doctrine2Bridge\Doctrine2CacheBridgeServiceProvider"
./artisan vendor:publish --provider "Doctrine2Bridge\Doctrine2BridgeServiceProvider"

这将为您在配置目录中提供配置文件的最新副本(d2bcache.phpdb2doctrine.php)。

现在,还需要编辑这些文件,以及适当地设置 Laravel5 的自己的 cache.phpdatabase.php

Doctrine2 的 XML 模式默认目录为 database/xml。这可以在 config/d2bdoctrine.php 中配置。

有关如何与 Laravel 自身的身份验证系统集成,请参阅此处

用法

创建了四个绑定,可以通过 Laravel 的 IoC 以标准方式注入

  • Doctrine\ORM\EntityManagerInterface(这是一个 Doctrine\ORM\EntityManager 的实例)
  • Doctrine\Common\Cache\Cache(这是一个适当的缓存提供程序的实例)
  • Doctrine\ORM\Mapping\ClassMetadataFactory(在此包中由控制台生成命令使用)
  • Doctrine2Bridge\Support\Repository(由 D2R 外观使用)

提供了三个外观 - 用于 Doctrine2 缓存、实体管理器和便捷的仓库生成器。可以使用以下方式使用它们

D2Cache::save( $key, $value );
D2Cache::fetch( $key );

D2EM::persist( $object );
D2EM::flush();
$users = D2EM::getRepository( 'Entities\User' )->findAll();

通常我们会创建并使用仓库如下

$sample = D2EM::getRepository( '\Entities\SampleEntity' )->find(5);

假设 d2bdoctrine.namespaces.models => 'Entities',那么我们可以使用 D2R 外观以下任何一种方式来达到相同的结果

$sample = D2R::r( 'SampleEntity' )->find(5);
$sample = D2R::r( 'Entities\SampleEntity' )->find(5);
$sample = D2R::r( 'SampleEntity', 'Entities' )->find(5);

更详细的用法

默认情况下,配置文件期望在 database/xml 下找到 XML 模式定义。例如,假设我们有一个名为 database/xml/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>

假设您已在其配置文件中配置了数据库连接参数,并且位于项目的基础目录中,我们可以使用以下命令创建实体、代理和仓库

./artisan d2b:generate:entities
./artisan d2b:generate:proxies
./artisan d2b:generate:repositories

此外,还有方便的快捷方式可以做到这一点

./artisan d2b:generate:all

请阅读这些命令的输出,因为可能需要运行两次。

我们还捆绑了一个完整的Doctrine2 CLI实用工具,因此上述操作也可以通过以下方式完成:

./vendor/bin/d2b-doctrine2 orm:generate-entities database/
./vendor/bin/d2b-doctrine2 orm:generate-proxies
./vendor/bin/d2b-doctrine2 orm:generate-repositories database/

您还可以(删除)并使用以下命令创建数据库:

./artisan d2b:schema:drop --commit
./artisan d2b:schema:create --commit

并且您可以通过以下方式更新和验证:

./artisan d2b:schema:update --commit
./artisan d2b:schema:validate

现在您可以向数据库添加一些数据

$se = new Entities\SampleEntity;
$se->setName( rand( 0, 100 ) );
D2EM::persist( $se );
D2EM::flush();

并且查询它

echo count( D2EM::getRepository( 'Entities\SampleEntity' )->findAll() );

我使用优秀的Skipper来创建和管理我的XML模式文件。

仓库的便利函数

SQL查询日志

本包包括Doctrine\DBAL\Logging\SQLLlogger的实现,它记录查询时间并调用Laravel的Log外观来记录查询执行时间和SQL查询。

此记录器可以在配置文件中启用。

## 许可证

与Laravel框架本身一样,本项目在MIT许可证下开源。

灵感来源

基于我为Laravel4编写的原始包opensolutions/doctrine2bridge。当从mitchellvanw/laravel-doctrine迁移到Laravel5时,一些额外的灵感。