Yii 2.0: yii2-transpose-dataprovider

A Yii2 data provider that transpose data into a table format
1 follower

Installation

The preferred way to install this extension is through composer.

$ composer require eddmash/transposedataprovider "@dev"

Transposing Query.

Transposes data returned by a query.

Assuming you have a Query that outputs the following :

student | subject | grade
--------------------------
 mat    | cre     | 52
 mat    | ghc     | 40
 mat    | physics | 60
 leon   | cre     | 70
 leon   | ghc     | 80
 leon   | physics | 10

and we need our data to look as below :

student | cre | ghc | physics
------------------------------
 mat    | 52  | 40  | 60
 leon   | 70  | 80  | 10

We achive this by doing :

use Eddmash\TransposeDataProvider;

$dataProvider = new TransposeDataProvider([
     'query' => $query,
     'columnsField' => 'subject',
     'groupField' => 'student',
     'valuesField' => 'grade',
     'pagination' => [
         'pagesize' => $pageSize // in case you want a default pagesize
     ]
]);

By default the transposed output contains only the columns found on the query TransposeDataProvider::$columnsField.

To get other columns present on the query add them to the TransposeDataProvider::$extraFields.

Transposing EAV Data.

The DataProvide also supports EAV setups, assuming we have the following setup.

         Entity
------------------------------
id   | name
-----------------
 1   | cre
 2   | ghc
 3   | physics
 4   | cre
 5   | ghc
 6   | physics
     Value
-----------------------------
 
entity_id | attribute_id | value
----------------------------------
 1        | 1            | 52
 2        | 2            | yes
 3        | 3            | 100
 4        | 4            | 70
 5        | 5            | it all sucks
 6        | 6            | 10

Attribute

----------------------------------
 
name         | attribute_id
--------------------------
 maganize    |    1
 range       |    2
 power       |    3
 slogan      |    4
 song        |    5
 fire mode   |    6

To Get the following output ::

entity | magazine | range | power | slogan | song         | fire mode
------------------------------------------------------------------------
  1    |   50     |  yes  | 100   | 70     | it all sucks | 10

Transpose takes another parameter TransposeDataProvider::$columnQuery which should return the columns.

use Eddmash\TransposeDataProvider
 
$query = Value::find()->joinWith(['attribute attribute', 'attribute.entity entity'])->where(['entity.id'=>5]);
 
$columnQuery = Attribute::find()->joinWith(['entity entity'])->where(['entity.id'=>5]);
 
$dataProvider = new TransposeDataProvider([
     'query' => $query,//
     'columnsField' => 'attribute.name',
     'groupField' => 'entity_id',
     'valuesField' => 'value',
     'columnsQuery' => $columnQuery,
     'pagination' => [
         'pagesize' => 10
     ]
]);

Be the first person to leave a comment

Please to leave your comment.

Create extension
Downloads
No downloadable files yet
  • Yii Version: 2.0
  • License: MIT License
  • Developed by: eddmash
  • Category: Others
  • Votes: No votes yet
  • Downloaded: 0 times
  • Created on: Sep 12, 2017
  • Last updated: Sep 12, 2017
  • Tags: dataprovider