2017-01-19 5 views
0

У меня есть этотArrayDataProvider GridView yii2

public function actionIndex() 
{ 
    $data = order::getSome(); 
    $dataProvider = new ArrayDataProvider([ 
     'allModels' => $data, 
     'sort' => [ 
      'attributes' => ['paid'] 
     ] 


    ]); 
    return $this->render('index',['dataProvider' =>$dataProvider]); 
} 

Если в GridView удалить 'columns'=> [, есть возможность отправлять все столбцы данных правильными. Если в 'columns'=> [ введите имена столбцов, то есть «0» во всех столбцах. Как отобразить определенные столбцы?

`public static function getSome(){ 
    return Yii::$app->getDb()->createCommand(
      "SELECT order_customFields.order_customFields_delivery_method, 

    sum(case `order`.order_status when 'paid' then 1 else 0 end) paid, 
    sum(case `order`.order_status when 'later' then 1 else 0 end) later, 
    sum(case `order`.order_status when 'delivery-approved' then 1 else 0 end) deliveryapproved, 

FROM order_customFields 
    INNER JOIN `order` ON order_customFields.order_id = `order`.order_id 
WHERE 
    order_customFields.order_customFields_order_date >= '2016-12-01' AND 
    order_customFields.order_customFields_order_date <= '2016-12-31' 
AND order_customFields.order_customFields_delivery_method is not null 
GROUP BY  
    order_customFields.order_customFields_delivery_method" 
     )->queryAll(); 
    }` 
+0

Объяснить breifly –

+0

Пожалуйста, включите код, который не работает , – topher

ответ

1

на основе вашего образца может быть, вы используете ActiveRecord Order (а не заказ)

Order::getSome(); 

эта функция даст вам соответствующие модели, так почему вы не использовать канонический путь yii2 как

/** 
* Lists all AntigoneResidente models. 
* @return mixed 
*/ 
public function actionIndex() 
{ 
    $searchModel = new OrderSearch(); 
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 


    return $this->render('@common/views/antigone-residente/index', [ 
     'searchModel' => $searchModel, 
     'dataProvider' => $dataProvider, 
    ]); 
} 

затем в GridView вы можете получить доступ к конкретному столбцу

<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'filterModel' => $searchModel, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 
      //'id', 
      'your_column_name1', 
      'your_column_name2', 
      ..... 

      ['class' => 'yii\grid\ActionColumn',], 
     ], 
]); ?> 
+0

Добавить getSome() в голову – cruim

+0

Sory, я виноват, все работает. В этом столбце все данные: «0» – cruim

+0

@cruim. ответ предоставил работу или возникли некоторые проблемы ..? дай мне знать ? – scaisEdge

0

Если вы хотите использовать arrayDataProvider, то вы должны передать данные в виде массива не в объекте

 public function actionIndex() 
    { 
     $data = order::getSome()->asArray(); 
     $dataProvider = new ArrayDataProvider([ 
      'key'=>'id', 
      'allModels' => $data, 
      'sort' => [ 
       'attributes' => ['id','paid','vendorid','orderno'], 
      ], 
    ]); 

} 

В вашем Gridview

echo GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 
      'id', 
      'paid', 
      'vendorid', 
'orderno' 
      ], 

    ] 
]); 
+0

Вызов функции-члена asArray() для массива Ошибка – cruim

+0

sory для моей ошибки использовать asArray() в вашей функции getSome() – Dani