pahanini / yii2-refiner
帮助向活动查询添加额外的where参数(精炼查询)
v0.6
2014-07-09 07:55 UTC
README
帮助根据http请求添加额外的'where'条件到活动查询中(精炼搜索查询),并自动计算用于构建UI的不同过滤器可能的值。可应用于RESTful API。
条款
"基础查询" - 在应用任何精炼器之前,用于查找所有可能的项目的ActiveQuery(例如MySqlQuery、SphinxQuery)。例如 SELECT * FROM products WHERE balance > 0
"精炼器" 是一个对象,它
- 计算UI的所有可能的(或独立的)值,例如可能的产品类别列表、产品之间的最大和最小价格(所有回调)。
- 分析http请求并向基本查询添加额外的where条件(精炼回调)。
- 计算UI的活动值。活动值取决于其他精炼器的值(活动回调)。
"精炼器集" - 包含一个或多个精炼器和基础查询的对象。精炼器集将所有精炼器应用于查询。
安装
添加
"pahanini/yii2-refiner": "*"
到您的 composer.json
文件的require部分。
使用
设置
精炼器集有两个主要独立的函数
- getRefinedQuery - 返回由精炼器修改的查询
- getRefinerValues - 返回所有精炼器的值
精炼器
每个精炼器根据http查询参数修改基本查询。要修改查询,精炼器调用 refine($query, $params)
回调函数。此函数必须返回修改后的查询。函数示例
$this->refine = function($query, $params) {
return $query->andWhere('has_discount > :val', [':val' => $params]);
}
注意
- 如果http参数不存在,则不会调用精炼函数
- 如果设置了 $paramSeparator 属性,并且http参数不是数组,则http参数将使用 $paramSeparator 属性转换为数组
- 如果设置了 $paramToArray 属性,并且http参数不是数组,则它将转换为包含一个元素的数组
- 如果设置了 $paramType,则将使用php setType函数更改http参数类型
一些示例
public function init()
{
$this->refinerSet = new \pahanini\refiner\Set([
'refiners' => [
// standard range
'price' => [
'class' => '\pahanini\refiner\db\Range',
],
'category' => [
'class' => '\pahanini\refiner\db\Count',
],
// Select color values from another model
'onlyRedColor' => [
'refine' => function($query, $param) {
return $query->andWhere('color = "red"');
},
'all' => function($query) {
return $query->select('COUNT(*)')->andWhere('color = "red"')
}
]
]
])
}
public function actionSearch()
{
$query = Product::find()->andWhere('balance > 0');
$refinerResult = $this->refinerSet->applyTo($query);
$this->render('search', ['query' => $query, 'refiners' => $this->refinerSet->getRefinerValues()])
}