, (*1)
Yii2 ArrayQuery Component
Allows searching/filtering of an array. This component is very useful when displaying array data in GridViews with an
ArrayDataProvider., (*2)
, (*3)
Installation
The preferred way to install this extension is through composer., (*4)
Either run, (*5)
php composer.phar require --prefer-dist yii2mod/yii2-array-query "*"
or add, (*6)
"yii2mod/yii2-array-query": "*"
to the require section of your composer.json., (*7)
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:, (*8)
$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:, (*9)
<?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., (*10)