imatic/data-bundle

与数据一起工作的包

安装次数: 5 219

依赖项: 1

建议者: 0

安全性: 0

星级: 1

关注者: 7

分支: 0

开放性问题: 0

类型:symfony-bundle


README

Build Status
License: MIT

ImaticDataBundle

使与数据一起工作变得简单。

包的主要目标

  • 以统一的方式访问数据(无论它们存储在哪里)以及以较小的努力实现过滤、排序、分页功能的能力。
  • 以统一的方式执行任意操作(激活用户、在电商网站下订单等...),无论操作是由用户从浏览器、通过某些消息队列、控制台或其他方式执行的。

以统一的方式访问数据

此包使用查询对象从任意存储中检索/存储数据。目前,我们有针对 doctrine dbaldoctrine orm 的驱动程序。其他驱动程序可以相对容易地实现。

所有查询对象都必须实现特定驱动程序的 QueryObjectInterface 以查询数据。

使用 doctrine orm 驱动程序查询活跃用户的示例

首先,我们需要创建活跃用户的查询。

<?php

use Doctrine\ORM\EntityManager;
use Doctrine\ORM\QueryBuilder;
use Imatic\Bundle\DataBundle\Data\Driver\DoctrineORM\QueryObjectInterface;

class ActiveUsersQuery implements QueryObjectInterface
{
    public function build(EntityManager $em): QueryBuilder
    {
        return $em->getRepository(User::class)->createQueryBuilder('u')
            ->select('u')
            ->where('u.active = :active')
            ->setParameter('active', true);
    }
}

现在我们可以使用 查询执行器 来执行查询。

<?php

$queryExecutor = $container->get('Imatic\Bundle\DataBundle\Data\Driver\DoctrineORM\QueryExecutor');
/** @var User[] */
$activeUsers = $queryExecutor->execute(new ActiveUsersQuery());

变量 $activeUsers 现在包含活跃用户的对象。

要了解更多关于查询对象(如何进行过滤、排序、分页等)的信息,请参阅 查询对象文档

执行操作

此包使用命令来执行操作。命令实例传递给命令执行器,该执行器调用命令处理器来完成实际工作。

使用命令导出所有活跃用户的示例

首先,我们需要创建命令处理器,该处理器将导出所有活跃用户(注意,使用的类 UserExporter 不存在,其责任是将传入的用户以给定格式导出)。

<?php

use Imatic\Bundle\DataBundle\Data\Command\CommandInterface;
use Imatic\Bundle\DataBundle\Data\Command\HandlerInterface;

ExportActiveUsersHandler implements HandlerInterface
{
    private $userExporter;
    private $queryExecutor;

    public __construct(UserExporter $userExporter, QueryExecutor $queryExecutor)
    {
        $this->userExporter = $userExporter;
        $this->queryExecutor = $queryExecutor;
    }

    public function handle(CommandInterface $command)
    {
        $exportFormat = $command->getParameter('format');
        $activeUsers = $this->queryExecutor->execute(new ActiveUsersQuery());
        $this->userExporter->export($activeUsers, $exportFormat);
    }
}

然后,我们需要在容器中注册处理器。

services:
    ExportActiveUsersHandler:
        arguments:
            - '@app.user_exporter'
            - '@Imatic\Bundle\DataBundle\Data\Driver\DoctrineORM\QueryExecutor'
        tags:
            - { name: 'imatic_data.handler' }

然后,我们可以通过 命令执行器 运行命令。命令的第一个参数是处理器别名(在容器中注册处理器时指定),第二个参数是可选的,并指定传递给处理器的选项)。

<?php

use Imatic\Bundle\DataBundle\Data\Command\Command;

$commandExecutor = $container->get('Imatic\Bundle\DataBundle\Data\Command\CommandExecutor');
$commandExecutor->execute(new Command('export_active_users', ['format' => 'json']));

要了解更多关于命令的信息,请参阅 命令文档

进一步阅读

访问我们的 文档 了解此包的所有功能。