Sort mixed models with one dataprovider using ArrayDataProvider

I used ArrayDataProvider to mix models and then merged them into one data-provider. I used the data-provider in grid-view and everything is works fine. But I need to order the grid-view by one column I tried a lot of solutions but none of them are worked.

This my model code (order by item_order )


 public function getAllSelectedItemsInTheUnit($unitId, $grid = false)

	{

    	$finalList = array();

    	$storiesList = array();

    	$activityList = array();

    	$breakList = array();

    	$stories = UnitStories::find()->joinWith(['story'])->where("unit_id=$unitId")->all();

    	if (count($stories) > 0) {

        	foreach ($stories as $item) {

            	$storiesList[] = [

                	'key' => self::TYPE_STORY . $item->id,

                	'id' => $item->id,

                	'title' => $item->story->title,

                	'type' => self::TYPE_STORY,

                	'item_order' => $item->unit_order,

            	];

        	}

    	}


    	$activities = UnitActivities::find()->joinWith(['activity'])->where("unit_id=$unitId")->all();

    	if (count($activities) > 0) {

        	foreach ($activities as $item) {

            	$activityList[] = [

                	'key' => self::TYPE_ACTIVITY . $item->id,

                	'id' => $item->id,

                	'title' => $item->activity->title,

                	'type' => self::TYPE_ACTIVITY,

                	'item_order' => $item->activity_order,

            	];

        	}

    	}


    	$breaks = UnitBreaks::find()->where("unit_id=$unitId")->all();

    	if (count($breaks) > 0) {

        	foreach ($breaks as $item) {

            	$breakList[] = [

                	'key' => self::TYPE_BREAK . $item->id,

                	'id' => $item->id,

                	'title' => $item->title,

                	'type' => self::TYPE_BREAK,

                	'item_order' => $item->unit_order,

            	];

        	}

    	}

 		$finalList = array_merge($storiesList, $activityList, $breakList);

 		$dataProvider = new ArrayDataProvider([

            	'allModels' => $finalList, 'key' => 'key',

            	'sort' => [

                	'attributes' => ['item_order'],

            	],


        	]);


        	return $dataProvider;


  	

	}



Any solution will be very good even sort array by pure PHP I guess will fix the problem .

how you using the dataProvider, I would like to see your view code as well. I put together a simple test it works as expected.




<?php




    public function actionIndex()

    {

        $data = [

            ["id" => 1, "item_order" => 'one'],

            ["id" => 2, "item_order" => 'two'],

            ["id" => 3, "item_order" => 'three'],

            ["id" => 4, "item_order" => 'four'],

            ["id" => 5, "item_order" => 'five']

        ];


        $dataProvider = new \yii\data\ArrayDataProvider([

            'allModels' => $data,

            'sort' => [

                'attributes' => ['item_order'],

            ],

        ]);


        return $this->render('index', [

            'dataProvider' => $dataProvider,

        ]);

    }






    <?= \yii\grid\GridView::widget([

        'dataProvider' => $dataProvider,

        'columns' => [

            ['class' => 'yii\grid\SerialColumn'],


            'item_order',


            ['class' => 'yii\grid\ActionColumn'],

        ],

    ]); ?>    



Thanks dear I used this extension https://github.com/richardfan1126/yii2-sortable-gridview




 <?php Pjax::begin(['id' => 'pjaxSelectedItemes', 'timeout' => false, 'enablePushState' => false]); ?>

                            	<?= SortableGridView::widget([

                                	'dataProvider' => $dataProviderForSelectedItem,

                                	'id' => 'selectedItemes',

                                	'sortUrl' => Url::to(['sort-item']),

                                	'sortingPromptText' => Yii::t('unit', 'Please wait loading'),

                                	'failText' => Yii::t('unit', 'Fail to sort'),

                                	'tableOptions' => ['class' => 'table table-hover'],

                                	'columns' => [

                                   	'item_order',


                                    	[

                                        	'attribute' => 'id',

                                        	'label' => Yii::t('unit', 'ID'),

                                        	'value' => function ($model) {

                                            	return $model['id'];

                                        	},

                                        	'format' => 'raw',

                                    	],


                                    	[

                                        	'attribute' => 'title',

                                        	'label' => Yii::t('unit', 'Title'),

                                        	'value' => function ($model) {

                                            	return $model['item_order'] . "." . $model['title'];

                                        	},

                                        	'format' => 'raw',

                                    	],

                                    	[

                                        	'attribute' => 'time',

                                        	'label' => Yii::t('unit', 'Time'),

                                        	'value' => function ($model) {

                                            	return $model['time'];

                                        	},

                                        	'format' => 'raw',

                                    	],


                                   	

                                	],

                            	]); ?>

                            	<?php Pjax::end(); ?>



I tested it in gridview but the results is same .

my array not like your array

Array ( [0] => Array ( [key] => 3287 [elementId] => 287 [id] => 25 [title] => علي باب والمغارة الذكية [time] => - [type] => 3 [item_order] => 2 ) [1] => Array ( [key] => 3290 [elementId] => 290 [id] => 28 [title] => قصة ليلى والذئب والسبعين حرامي [time] => - [type] => 3 [item_order] => 0 ) [2] => Array ( [key] => 3291 [elementId] => 291 [id] => 29 [title] => الامير النائم المتوحش [time] => - [type] => 3 [item_order] => 1 ) [3] => Array ( [key] => 3292 [elementId] => 292 [id] => 30 [title] => قصة ليلى والذئب والسبعين حرامي [time] => - [type] => 3 [item_order] => 3 ) [4] => Array ( [key] => 3293 [elementId] => 293 [id] => 31 [title] => الامير النائم المتوحش [time] => - [type] => 3 [item_order] => 4 ) [5] => Array ( [key] => 3294 [elementId] => 294 [id] => 16 [title] => قصة ليلى والذئب والسبعين حرامي [time] => - [type] => 3 [item_order] => 5 ) [6] => Array ( [key] => 3295 [elementId] => 295 [id] => 26 [title] => قصة ليلى والذئب والسبعين حرامي [time] => - [type] => 3 [item_order] => 6 ) [7] => Array ( [key] => 3296 [elementId] => 296 [id] => 17 [title] => الامير النائم المتوحش مع تاغ اخر [time] => - [type] => 3 [item_order] => 7 ) [8] => Array ( [key] => 3297 [elementId] => 297 [id] => 33 [title] => الامير النائم المتوحش [time] => - [type] => 3 [item_order] => 8 ) [9] => Array ( [key] => 3298 [elementId] => 298 [id] => 16 [title] => قصة ليلى والذئب والسبعين حرامي [time] => - [type] => 3 [item_order] => 9 ) [10] => Array ( [key] => 3299 [elementId] => 299 [id] => 32 [title] => قصة ليلى والذئب والسبعين حرامي [time] => - [type] => 3 [item_order] => 10 ) [11] => Array ( [key] => 3300 [elementId] => 300 [id] => 34 [title] => العنوانالعنوانالعنوانالعنوان [time] => - [type] => 3 [item_order] => 11 ) [12] => Array ( [key] => 3301 [elementId] => 301 [id] => 36 [title] => الذئب ولافراشة [time] => - [type] => 3 [item_order] => 12 ) [13] => Array ( [key] => 3302 [elementId] => 302 [id] => 37 [title] => تجريب التاغ [time] => - [type] => 3 [item_order] => 13 ) [14] => Array ( [key] => 3303 [elementId] => 303 [id] => 27 [title] => الامير النائم المتوحش [time] => - [type] => 3 [item_order] => 14 ) [15] => Array ( [key] => 3304 [elementId] => 304 [id] => 35 [title] => العنوانالعنوانالعنوانالعنوان [time] => - [type] => 3 [item_order] => 15 ) [16] => Array ( [key] => 115 [elementId] => 15 [id] => 25 [title] => مع ملف [time] => 00:47 ساعة [type] => 1 [item_order] => 16 ) [17] => Array ( [key] => 118 [elementId] => 18 [id] => 28 [title] => مع ملف [time] => 00:47 ساعة [type] => 1 [item_order] => 17 ) [18] => Array ( [key] => 119 [elementId] => 19 [id] => 29 [title] => اكتفيتي مع صورة وتجربة الدبليكي [time] => 02:12 ساعة [type] => 1 [item_order] => 18 ) [19] => Array ( [key] => 120 [elementId] => 20 [id] => 20 [title] => اكتفيتي مع صورة وتجربة الدبليكي [time] => 00:25 ساعة [type] => 1 [item_order] => 19 ) [20] => Array ( [key] => 121 [elementId] => 21 [id] => 24 [title] => مع ملف [time] => 00:47 ساعة [type] => 1 [item_order] => 20 ) [21] => Array ( [key] => 122 [elementId] => 22 [id] => 27 [title] => مع ملف [time] => 00:47 ساعة [type] => 1 [item_order] => 21 ) [22] => Array ( [key] => 123 [elementId] => 23 [id] => 26 [title] => اكتفيتي مع صورة وتجربة الدبليكي [time] => 02:12 ساعة [type] => 1 [item_order] => 22 ) [23] => Array ( [key] => 217 [elementId] => 17 [id] => 17 [title] => استراحة للعمر [time] => - [type] => 2 [item_order] => 23 ) [24] => Array ( [key] => 218 [elementId] => 18 [id] => 18 [title] => العنوان [time] => - [type] => 2 [item_order] => 24 ) [25] => Array ( [key] => 219 [elementId] => 19 [id] => 19 [title] => تجربة [time] => - [type] => 2 [item_order] => 25 ) [26] => Array ( [key] => 220 [elementId] => 20 [id] => 20 [title] => استرحاة للمتة [time] => - [type] => 2 [item_order] => 26 ) [27] => Array ( [key] => 221 [elementId] => 21 [id] => 21 [title] => تجريب [time] => - [type] => 2 [item_order] => 27 ) )

weird here is an example with your data


/**

     * Displays homepage.

     *

     * @return string

     */

    public function actionIndex()

    {

        $data = [

['key' => 3287, 'elementId' => 287,  'id' => 25,  'title' => 'علي باب والمغارة الذكية', 'time' => '-', 'type' => 3, 'item_order' => 2],

['key' => 3290, 'elementId' => 290,  'id' => 28,  'title' => 'قصة ليلى والذئب والسبعين حرامي', 'time' => '-', 'type' => 3, 'item_order' => 0],

['key' => 3291, 'elementId' => 291,  'id' => 29,  'title' => 'الامير النائم المتوحش', 'time' => '-', 'type' => 3, 'item_order' => 1],

['key' => 3292, 'elementId' => 292,  'id' => 30,  'title' => 'قصة ليلى والذئب والسبعين حرامي', 'time' => '-', 'type' => 3, 'item_order' => 3],

['key' => 3293, 'elementId' => 293,  'id' => 31,  'title' => 'الامير النائم المتوحش', 'time' => '-', 'type' => 3, 'item_order' => 4],

['key' => 3294, 'elementId' => 294,  'id' => 16,  'title' => 'قصة ليلى والذئب والسبعين حرامي', 'time' => '-', 'type' => 3, 'item_order' => 5],

['key' => 3295, 'elementId' => 295,  'id' => 26,  'title' => 'قصة ليلى والذئب والسبعين حرامي', 'time' => '-', 'type' => 3, 'item_order' => 6],

['key' => 3296, 'elementId' => 296,  'id' => 17,  'title' => 'الامير النائم المتوحش مع تاغ اخر', 'time' => '-', 'type' => 3, 'item_order' => 7],

['key' => 3297, 'elementId' => 297,  'id' => 33,  'title' => 'الامير النائم المتوحش', 'time' => '-', 'type' => 3, 'item_order' => 8],

['key' => 3298, 'elementId' => 298,  'id' => 16,  'title' => 'قصة ليلى والذئب والسبعين حرامي', 'time' => '-', 'type' => 3, 'item_order' => 9],

['key' => 3299, 'elementId' => 299,  'id' => 32,  'title' => 'قصة ليلى والذئب والسبعين حرامي', 'time' => '-', 'type' => 3, 'item_order' => 10],

['key' => 3300, 'elementId' => 300,  'id' => 34,  'title' => 'العنوانالعنوانالعنوانالعنوان', 'time' => '-', 'type' => 3, 'item_order' => 11],

['key' => 3301, 'elementId' => 301,  'id' => 36,  'title' => 'الذئب ولافراشة', 'time' => '-', 'type' => 3, 'item_order' => 12],

['key' => 3302, 'elementId' => 302,  'id' => 37,  'title' => 'تجريب التاغ', 'time' => '-', 'type' => 3, 'item_order' => 13],

['key' => 3303, 'elementId' => 303,  'id' => 27,  'title' => 'الامير النائم المتوحش', 'time' => '-', 'type' => 3, 'item_order' => 14],

['key' => 3304, 'elementId' => 304,  'id' => 35,  'title' => 'العنوانالعنوانالعنوانالعنوان', 'time' => '-', 'type' => 3, 'item_order' => 15],

['key' => 115, 'elementId' => 15,  'id' => 25,  'title' => 'مع ملف ساع', 'time' => '00:47', 'type' => 1, 'item_order' => 16],

['key' => 118, 'elementId' => 18,  'id' => 28,  'title' => 'مع ملف', 'time' => '00:47', 'type' => 1, 'item_order' => 17],

['key' => 119, 'elementId' => 19,  'id' => 29,  'title' => 'اكتفيتي مع صورة وتجربة الدبليكي', 'time' => '02:12', 'type' => 1, 'item_order' => 18],

['key' => 120, 'elementId' => 20,  'id' => 20,  'title' => 'اكتفيتي مع صورة وتجربة الدبليكي', 'time' => '00:25', 'type' => 1, 'item_order' => 1],

['key' => 121, 'elementId' => 21,  'id' => 24,  'title' => 'مع ملف', 'time' => '00:47', 'type' => 1, 'item_order' => 20],

['key' => 122, 'elementId' => 22,  'id' => 27,  'title' => 'مع ملف', 'time' => '00:47', 'type' => 1, 'item_order' => 21],

['key' => 123, 'elementId' => 23,  'id' => 26,  'title' => 'اكتفيتي مع صورة وتجربة الدبليكي', 'time' => '02:12', 'type' => 1, 'item_order' => 22],

['key' => 217, 'elementId' => 17,  'id' => 17,  'title' => 'استراحة للعمر', 'time' => '-', 'type' => 2, 'item_order' => 23],

['key' => 218, 'elementId' => 18,  'id' => 18,  'title' => 'العنوان', 'time' => '-', 'type' => 2, 'item_order' => 24],

['key' => 219, 'elementId' => 19,  'id' => 19,  'title' => 'تجربة', 'time' => '-', 'type' => 2, 'item_order' => 25],

['key' => 220, 'elementId' => 20,  'id' => 20,  'title' => 'استرحاة للمتة', 'time' => '-', 'type' => 2, 'item_order' => 26],

['key' => 221, 'elementId' => 21,  'id' => 21,  'title' => 'تجريب', 'time' => '-', 'type' => 2, 'item_order' => 27],

        ];


        $dataProvider = new \yii\data\ArrayDataProvider([

            'allModels' => $data,

            'sort' => [

                'attributes' => ['item_order'],

            ],

        ]);


        return $this->render('index', [

            'dataProvider' => $dataProvider,

        ]);

    }




//view


<div class="grid">

    <?= \yii\grid\GridView::widget([

        'dataProvider' => $dataProvider,

        'columns' => [

            ['class' => 'yii\grid\SerialColumn'],


            'item_order',


            ['class' => 'yii\grid\ActionColumn'],

        ],

    ]); ?>    

</div>







it works as expected

Dear Alrazi, I tried your data in grid but problem is still appear.

this is the image

try replace your SortableGridView::widget with GridView::widget and test it first i think its your extension you are using.

I tried that but still same results as extension.