rulerz-php / doctrine-orm
RulerZ 的 Doctrine ORM 编译目标
Requires
- php: >=7.1
- doctrine/orm: ^2.4
- kphoen/rulerz: dev-master as 1.0.0
Requires (Dev)
- behat/behat: ~3.0
- kphoen/rusty: dev-master
- liip/rmt: ^1.2
- phpunit/phpunit: ^7.1
This package is auto-updated.
Last update: 2024-08-29 04:37:46 UTC
README
为 RulerZ 的 Doctrine ORM 编译目标。
用法
Doctrine ORM 是 RulerZ 支持的目标之一。
本指南将向您展示如何使用 Doctrine 和 RulerZ 获取对象。
以下是您需要执行的步骤摘要
配置 Doctrine ORM
本主题将不会在此直接处理。您可以选择遵循 官方文档 或使用您所使用的框架推荐的包/模块/等。
配置 RulerZ
一旦 Doctrine 安装并配置完毕,我们就可以配置 RulerZ 引擎。
$rulerz = new RulerZ( $compiler, [ new \RulerZ\DoctrineORM\Target\DoctrineORM(), // this line is Doctrine-specific // other compilation targets... ] );
唯一的与 Doctrine 相关的配置是将 DoctrineQueryBuilder
目标添加到已知编译目标列表中。
过滤目标
现在 Doctrine 和 RulerZ 都已准备就绪,您可以使用它们来获取数据。
我们之前注入到 RulerZ 引擎中的 DoctrineQueryBuilder
实例只知道如何使用 QueryBuilder
,因此第一步是创建一个
$playersQueryBuilder = $entityManager ->createQueryBuilder() ->select('p') ->from(Entity\Player::class, 'p');
像往常一样,我们使用我们的目标(QueryBuilder
对象)和规则调用 RulerZ。RulerZ 将为给定的目标构建正确的执行器,并使用它来过滤数据,在我们的情况下是从数据库中检索数据。
$rule = 'gender = :gender and points > :points'; $parameters = [ 'points' => 30, 'gender' => 'M', ]; var_dump($rulerz->filter($playersQueryBuilder, $rule, $parameters));
处理连接
通常,您的实体将与您的应用程序中的其他实体有关联。
让我们假设我们的 Entity\Player
实体与 Entity\Group
实体有一个 1-1 的关联,并且我们想要检索属于具有角色 ROLE_ADMIN 的组的所有玩家。
使用该关联有两种编写规则的方法。在第一种方法中,我们让 RulerZ 自动确定如何连接实体
$playersQueryBuilder = $entityManager ->createQueryBuilder() ->select('p') ->from(Entity\Player::class, 'p'); $rule = '"ROLE_ADMIN" IN group.roles'; var_dump( iterator_to_array($rulerz->filter($playersQueryBuilder, $rule)) );
重要的是要注意,group
不是一个普通属性:它是一个另一个实体,由 RulerZ 连接。
注意: RulerZ 将在查询构建器上调用 join()
方法,因此它将默认执行内部连接。
如果您需要更多控制连接的处理方式,我们可以准备查询构建器并自行连接所需的实体
$playersQueryBuilder = $entityManager ->createQueryBuilder() ->select('p') ->from('Entity\Player', 'p') ->innerJoin('Entity\Group', 'g'); $rule = '"ROLE_ADMIN" IN g.roles'; var_dump( iterator_to_array($rulerz->filter($playersQueryBuilder, $rule)) );
这次,RulerZ 足够聪明,能够理解 g
可能是一个已连接的实体,并且它不应尝试自己连接它。
许可
本库采用 MIT 许可。