vrtc / yii2-querybuilder
为Yii2框架提供与jQuery QueryBuilder协同工作的扩展
1.1
2019-01-25 16:19 UTC
Requires
- yiisoft/yii2: 2.0.*
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-29 05:55:20 UTC
README
这是为Yii 2设计的jQuery QueryBuilder扩展。它通过Yii小部件封装QueryBuilder组件,因此使得在Yii应用程序中使用QueryBuilder组件变得非常简单。
安装
安装此扩展的最佳方式是通过composer。
运行以下命令:
php composer.phar require --prefer-dist vrtc/yii2-querybuilder "*"
或者在您的composer.json
文件的require部分添加以下内容:
"vrtc/yii2-querybuilder": "*"
使用方法
视图:
use vrtc\querybuilder\QueryBuilderForm; <?php QueryBuilderForm::begin([ 'rules' => $rules, 'builder' => [ 'id' => 'query-builder', 'filters' => [ ['id' => 'id', 'label' => 'Id', 'type' => 'integer'], ['id' => 'name', 'label' => 'Name', 'type' => 'string'], ['id' => 'lastName', 'label' => 'Last Name', 'type' => 'string'] ] ] ])?> <?= Html::submitButton('Apply'); ?> <?= Html::resetButton('Reset'); ?> <?php QueryBuilderForm::end() ?>
控制器:
use vrtc\querybuilder\Translator; public function actionIndex() { $query = Customer::find(); $rules = Json::decode(Yii::$app->request->get('rules')); if ($rules) { $translator = new Translator($rules); $query ->andWhere($translator->where()) ->addParams($translator->params()); } $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); return $this->render('index', [ 'dataProvider' => $dataProvider, 'rules' => $rules ]); }
搜索模型
if (!is_null($rules) && !empty($rules['rules'])) { if ($rules) { $translator = new Translator($rules); $query->andWhere($translator->where()) ->addParams($translator->params()); } }
搜索模型添加方法
public function getFilters() { $return[] = [ 'id' => 'quantity', 'label' => 'Количество', 'operators' => ['less', 'less_or_equal', 'equal', 'greater', 'greater_or_equal'], 'type' => 'integer', ]; $return[] = [ 'id' => 'stocks', 'label' => 'Наличие на складах', 'type' => 'string', 'input' => 'select', 'operators' => ['in', 'not_in'], 'values' => WareHouses::getWarehousesList(), ]; $return[] = [ 'id' => 'name', 'label' => 'Название', 'type' => 'string', 'operators' => ['contains', 'equal'], ]; $return[] = [ 'id' => 'category_id', 'label' => 'Категории', 'type' => 'string', 'input' => 'select', 'multiple' => true, /* 'values' => $this->categoriesList(),*/ 'plugin' => 'select2', 'pluginConfig' => [ 'data' => $this->categoriesListForAdminFilter(), 'multiple' => true, 'width' => '100%' ], 'operators' => ['in', 'not_in', 'is_null'], ]; return $return; } ```