pahanini/yii2-refiner

帮助向活动查询添加额外的where参数(精炼查询)

安装: 670

依赖关系: 0

建议: 0

安全性: 0

星标: 8

关注者: 4

分支: 6

开放问题: 1

类型:yii2-extension

v0.6 2014-07-09 07:55 UTC

This package is auto-updated.

Last update: 2024-09-18 17:27:33 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()])
}