opensolutions / doctrine2bridge-l5
为 Laravel 5 添加 Doctrine2 的功能(支持 SQL 记录和身份验证)
Requires
- php: >=5.5.0
- doctrine/orm: >=2.4.0
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.php
和 db2doctrine.php
)。
现在,还需要编辑这些文件,以及适当地设置 Laravel5 的自己的 cache.php
和 database.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时,一些额外的灵感。