imatic / data-bundle
与数据一起工作的包
v6.2.0
2024-02-29 10:36 UTC
Requires
- php: ^7.4 || ^8.0
- ext-json: *
- doctrine/dbal: ^3.0
- doctrine/doctrine-bundle: ^2.0
- symfony/framework-bundle: ^4.4 || ^5.4 || ^6.2
Requires (Dev)
- doctrine/doctrine-fixtures-bundle: ^3.0
- doctrine/orm: ^2.15
- friendsofphp/php-cs-fixer: ^3.2.1
- imatic/form-bundle: ^5.0.0
- imatic/testing: ^6.0.0
- mikey179/vfsstream: ^1.4
- phpstan/phpstan: ^1.8
- symfony/browser-kit: ^4.4 || ^5.0 || ^6.2
- symfony/phpunit-bridge: ^4.4 || ^5.0 || ^6.2
- symfony/security-bundle: ^4.4 || ^5.0 || ^6.2
- symfony/yaml: ^4.4 || ^5.0 || ^6.2
Suggests
- dev-master
- v6.2.0
- v6.1.5
- v6.1.4
- v6.1.3
- v6.1.2
- v6.1.1
- v6.1.0
- v6.0.4
- v6.0.3
- v6.0.2
- v6.0.1
- v6.0.0
- v5.x-dev
- v5.1.2
- v5.1.1
- v5.1.0
- v5.0.3
- v5.0.2
- v5.0.1
- v5.0.0
- 5.0.0-alpha.2
- 5.0.0-alpha
- v4.x-dev
- v4.2.1
- v4.2.0
- v4.1.2
- v4.1.1
- v4.1.0
- v4.0.1
- v4.0.0
- v3.1.0
- v3.0.12
- v3.0.11
- v3.0.10
- v3.0.9
- v3.0.8
- v3.0.7
- 3.0.6
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.1
- 3.0
- 2.x-dev
- 2.9.2
- 2.9.1
- 2.9.0
- 2.8.9
- 2.8.8
- 2.8.7
- 2.8.6
- 2.8.5
- 2.8.4
- 2.8.3
- 2.8.2
- 2.8.1
- 2.8.0
- 2.6.4
- 2.6.3
- 2.6.2
- 2.6.1
- 2.6.0
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 1.9.2
- dev-dependabot/composer/twig/twig-3.14.0
- dev-dbal3
- dev-dependent_filters
- dev-upgrade
This package is auto-updated.
Last update: 2024-09-12 07:20:24 UTC
README
ImaticDataBundle
此 包 使与数据一起工作变得简单。
包的主要目标
- 以统一的方式访问数据(无论它们存储在哪里)以及以较小的努力实现过滤、排序、分页功能的能力。
- 以统一的方式执行任意操作(激活用户、在电商网站下订单等...),无论操作是由用户从浏览器、通过某些消息队列、控制台或其他方式执行的。
以统一的方式访问数据
此包使用查询对象从任意存储中检索/存储数据。目前,我们有针对 doctrine dbal 和 doctrine 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']));
要了解更多关于命令的信息,请参阅 命令文档。
进一步阅读
访问我们的 文档 了解此包的所有功能。