madlines / criteria
dev-master
2016-12-04 15:54 UTC
Requires
- php: >=5.5
Requires (Dev)
- phpunit/phpunit: 4.2.*
This package is not auto-updated.
Last update: 2024-09-14 19:36:36 UTC
README
此库允许您以一种优雅的面向对象的方式准备一组搜索条件,而无需使用例如ORM特定的查询构建器。
请注意,此库并不试图取代任何查询构建器(例如,与Doctrine 2 ORM一起提供的那个)。
Criteria的结构使得编写一个解析器非常容易,该解析器可以将该对象转换为可以发送到您的数据库/搜索引擎/API/等处的查询。
示例用法
<?php use Madlines\Criteria\Criteria; use Madlines\Criteria\Criterion\Equals; use Madlines\Criteria\Criterion\StartsWith; $criteria = new Criteria(); $criteria = $criteria // $criteria is immutable so you have to store result of adding ->add(new Equals('foo', 'bar')) ->add(new StartsWith('lorem', 'ipsum')); // later in your code $criteriaArr = $criteria->getAll(); // returns an array containing all criteria $keys = $criteria->getKeys(); // returns all keys (foo and lorem in this case) $foo = $criteria->getFor('foo'); // return criterion object for given key
Criteria构建器
您可以使用CriteriaBuilder和一种映射策略来自动化构建Criteria对象的过程。
您可以创建自己的策略或使用内置的DefaultMappingStrategy,该策略将输入映射到内置的Criterion类型。您也可以手动创建映射。
<?php use Madlines\Criteria\Criteria; use Madlines\Criteria\Criterion; $builder = new \Madlines\Criteria\CriteriaBuilder(); $builder->setMappingStrategy(function ($operator) { if ('eq' === $operator) { return Criterion\Equals::class; } if ('contains' === $operator) { return Criterion\Contains::class; } return ''; }); // Optionally you can add some mapping manually $builder->map('starts_with', Criterion\StartsWith::class); $builder->setDefault('eq'); // e.g. $_GET array $input = [ 'foo__eq' => 'Cat', 'bar__contains' => 'Dog', ]; $criteria = $builder->buildFromArray($input, new Criteria());
允许的键
如果您只想允许为特定字段集创建条件,则必须扩展Criteria类并重写getAllowedKeys方法。
<?php class MyCriteria extends \Madlines\Criteria\Criteria { public function getAllowedKeys() { return ['lorem', 'ipsum']; } }