xpohoc269/yii2-array-query

安装次数: 2,927

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 0

分支: 11

类型:yii2-extension

2.0 2020-05-22 11:11 UTC

This package is auto-updated.

Last update: 2024-09-13 03:33:50 UTC


README

Yii2 ArrayQuery 组件


允许对数组进行搜索/过滤。当在带有 ArrayDataProvider 的 GridViews 中显示数组数据时,此组件非常有用。

Latest Stable Version Total Downloads License Build Status

安装

安装此扩展的首选方式是通过 composer

运行

php composer.phar require --prefer-dist yii2mod/yii2-array-query "*"

或在您的 composer.json 的 require 部分添加

"yii2mod/yii2-array-query": "*"

查询数据

您可以使用 [[\yii2mod\query\ArrayQuery]] 类对数组数据进行复杂查询。此类与常规 [[\yii\db\Query]] 类似,并使用相同的语法。例如

$data = [
    [
        'id' => 1,
        'username' => 'admin',
        'email' => 'admin@example.com'
    ],
    [
        'id' => 2,
        'username' => 'test',
        'email' => 'test@example.com'
    ],
];

$query = new ArrayQuery();
$query->from($data);
$query->where(['username' => 'admin']);

$rows = $query->all();

与 ArrayDataProvider 一起使用

您可以使用 [[\yii2mod\query\ArrayQuery]] 类进行过滤。例如

<?php

// Some search model
    
/**
 * Setup search function for filtering and sorting.
 * @param $params
 * @return ArrayDataProvider
 */
public function search($params)
{
    $models = User::find()->asArray()->all();

    $query = new ArrayQuery();
    $query->from($models);

    // load the search form data and validate
    if ($this->load($params) && $this->validate()) {
        // adjust the query by adding the filters
        $query->andFilterWhere(['id' => $this->id]);
        $query->andFilterWhere(['status' => $this->status]);
        $query->andFilterWhere(['like', 'username', $this->username]);
        $query->andFilterWhere(['like', 'email', $this->email]);
    }
    
    // prepare the ArrayDataProvider
    return new ArrayDataProvider([
        'allModels' => $query->indexBy('id')->all(),
        'sort' => [
            'attributes' => ['id', 'username', 'email', 'status'],
        ],
        'pagination' => [
            'pageSize' => 10
        ],
    ]);
}

支持我们

您的业务是否依赖于我们的贡献?在 Patreon 上联系我们并支持我们。所有承诺都将用于分配人力维护和新奇功能。