yii2mod/yii2-array-query
Yii2 component that allows for searching/filtering the elements of an array.
Maintainers
Package info
github.com/yii2mod/yii2-array-query
Type:yii2-extension
pkg:composer/yii2mod/yii2-array-query
Requires
- php: >=7.0.0
- yiisoft/yii2: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ~2.0
- phpunit/phpunit: ~6.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
MIT 646eee9dd473330a23d0d1d3669143c76465b535
- Igor Chepurnoi <chepurnoi.igor.woop@gmail.com>
README
Yii2 ArrayQuery Component
Allows searching/filtering of an array. This component is very useful when displaying array data in GridViews with an ArrayDataProvider.
👁 Latest Stable Version
👁 Total Downloads
👁 License
👁 Build Status
Installation
The preferred way to install this extension is through composer.
Either run
php composer.phar require --prefer-dist yii2mod/yii2-array-query "*"
or add
"yii2mod/yii2-array-query": "*"
to the require section of your composer.json.
Querying Data
You may execute complex query on the array data using [[\yii2mod\query\ArrayQuery]] class. This class works similar to regular [[\yii\db\Query]] and uses same syntax. For example:
$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();
Using with ArrayDataProvider
You may perform filtering using [[\yii2mod\query\ArrayQuery]] class. For example:
<?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 ], ]); }
Support us
Does your business depend on our contributions? Reach out and support us on Patreon. All pledges will be dedicated to allocating workforce on maintenance and new awesome stuff.
