summe / slice
此包的最新版本(dev-master)没有提供许可信息。
Doctrine2 ORM 结果集过滤库
dev-master
2015-08-14 22:39 UTC
Requires
- doctrine/orm: *
Requires (Dev)
- doctrine/data-fixtures: dev-master
- phpunit/phpunit: 3.7.*
- phpunit/phpunit-story: *
This package is not auto-updated.
Last update: 2024-09-28 17:38:24 UTC
README
Doctrine2 ORM 搜索工具 - 通过应用过滤器获取结果的一部分。
此库的主要用途是通过结合将其与将URL解析为过滤器的工具,来创建可分页搜索的前端界面。
此库解决的问题是在使用Doctrine的Pager类和复杂的联合过滤时,InnoDB数据库的计数非常缓慢。
通过从接口中删除DQL,此库解决了该问题,这允许管理多个高效查询的构建。这反过来又允许进行可靠的一对多和多对多联合的计数和分页。
这些搜索可以用来创建汇总报告。
用法
//Assume we have 2 classes namespace Acme\Demo\DemoBundle; class Contact { protected $id; protected $name; //one-to-many protected $addresses } class Address { protected $street; protected $zip; } $em = ...; \\Get entity manager use Slice\Search\Search; $search = new Search($em, 'AcmeDemoBundle:Contact'); //or 'Acme\Demo\DemoBundle' - full name //Only get contacts with addresses 00211 zip code. $search->addFilter(new EqualFilter('addresses.zip', '00211')); //order Contacts by their Address.street alphabetically ascending. $search->addFilter(new OrderByFilter('addresses.street', 'ASC')); //get first 10 results $search->addFilter(new PagingFilter(0, 10)); $results = $search->getResults(); $totalResults = $search->getTotalResultCount(); echo "$totalResults records were found.\n"; foreach($results as $contact) { $addresses = $contact->getAddresses(); print $contact->getName() . "\n"; foreach($addresses as $address) { print "\t" . $address->getStreet() ."\n"; } } // output paging links to allow various paging filters to be applied.
输出可能如下所示...
Joe Josephson
111 Address Place.
James Jameson
1234 Place St.
555 Five St.
...
(10th result)
Dan Danson
94 ABC St.
逻辑过滤器(AndFilter,OrFilter)允许将过滤器组合成复杂的逻辑。
DistanceCriteriaFilter和DistanceSortFilter允许对特定经纬度进行距离搜索。
可以将多个OrderByFilter实例添加到给定的搜索中,但只使用一个PagingFilter(最后一个给出的)。
最后,ResultSetBuilderInterface对象允许构建特定的结果,而不是默认的Entity结果集。
FormulaFilter允许表示复杂的查询,这些查询不易(或不方便)以其他方式表达 - 但是通过任何Web界面暴露给客户端是不安全的。
它可以用来以有趣的方式限制初始结果集。
示例
//using search above. $resultBuilder = new FlatResultBuilder(); $resultBuilder->addSelect('name', 'alias'); $results = $search->getResults($resultBuilder); // returns array(0 => array('alias' => 'Joe Josephson'), 1 => array('alias' => 'James Jameson'), 2 => array('alias' => 'Dan Danson') )