Yii2 Gridview не отображал данные на странице индекса

Я использую поиск моделей для фильтрации и запроса всех данных в контроллере и отправки данных обратно в представление. С запросом все в порядке, но в представлении данные не отображаются. И я не знаю, как это исправить?

Это мой поиск модели:

$user_id = Yii::$app->user->id;

$subquery = Workload::find()->select(['p.id', 'p.project_name', 'w.user_id', 'w.commit_time', 'w.comment', 'w.workload_type'])
    ->from(['project as p', 'workload as w'])
    ->where(['and','w.user_id = '.$user_id, 'p.id = w.project_id']);

$query = Workload::find()
    ->select(['workloadTeam.project_id', 'wp.project_name', 'workloadTeam.user_id', 'workloadTeam.commit_time', 'workloadTeam.week','workloadTeam.workload_type', 'workloadTeam.comment'])
    ->from(['wp' => $subquery]);

$query->join('INNER JOIN', 'workload as workloadTeam', 'wp.id = workloadTeam.project_id')->all();

$dataProvider = new ActiveDataProvider([
     'query' => $query,
]);

В моем контроллере:

    public function actionIndex()
        {
            $searchModel = new WorkloadSearch();
            $dataProvider = $searchModel->searchWorkloadofUser(Yii::$app->request->queryParams);

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

И на моей странице индекса просмотра:

$gridColumns = [
    [
        'class' => 'yii\grid\SerialColumn',
        'contentOptions' => ['style' => 'width: 40px;']
    ],
    [
        'attribute' => 'user_id',
        'label' => Yii::t('app', 'Members Alias'),
        'value' => 'profile.full_name',
        'filter' => \app\modules\admin\models\User::profileDropDown(),
        'contentOptions' => ['style' => 'width: 150px;', 'class' => 'select2'],
        'filterOptions' => ['data-widget' => 'select2'],
        'format' => 'html',
    ],
    [
        'attribute' => 'project_id',
        'label' => Yii::t('app', 'Assigned Projects'),
        'value' => 'project.project_name',
        'filter' => \app\modules\admin\models\Project::projectWorkloadMemberDropdown(),
        'contentOptions' => ['style' => 'width: 150px;', 'class' => 'select2', 'placeholder' => 'Select your projects'],
        'filterOptions' => ['data-widget' => 'select2'],
        'format' => 'html',
    ],
    [
        'label' => 'Committed (hr.)',
        'value' => function ($model) {
            return $model->commit_time;
        }
    ],
    [
        'label' => 'Burned Amount (hr.)',
        'value' => function ($model) {
            return WorkLog::getTotalBurnedHoursofUser($model->user_id, $model->project_id);
        },
    ],
    [
        'attribute' => 'week',
        'filterInputOptions' => ['class' => 'form-control datepicker'],
        'value' => function ($model) {
            return $model->week;
        },
        'label' => Yii::t('app', 'From Date'),
    ],
    [
        'label' => 'Comment',
        'value' => function ($model) {
            return $model->comment;
        }
    ],
    [
        'label' => 'Workload Type',
//        'attribute' => 'workload_type',
        'filter' => \app\modules\admin\models\Workload::WorkloadTypeDropdownList(),
        'value' => function ($model) {
            return \app\modules\admin\models\Workload::$workload_type_label[$model->workload_type];
        }
    ]
];
?>

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => $gridColumns,
    ]); ?>

person Francis    schedule 26.10.2015    source источник
comment
Что вы имеете в виду под словом "не могу показать данные"? GridView нет вообще или он показывает 0 записей? Также предоставьте полный код отображения GridView в представлении.   -  person arogachev    schedule 26.10.2015
comment
Я имею в виду, что данные не отображаются, но запрос хорош. Страница просмотра отображается нормально без данных   -  person Francis    schedule 26.10.2015
comment
Добавьте остальной код для отображения GridView.   -  person arogachev    schedule 26.10.2015
comment
Это ссылка для полного кода страницы просмотра: pastebin.com/fWiemhDr   -  person Francis    schedule 26.10.2015
comment
Лучше добавить код прямо к ответу, чем размещать его на внешних ресурсах, особенно если это не так долго. Но теперь я вижу, что GridView отображается нормально (сначала я подумал, может, вы забыли echo), поэтому проблема связана с 0 записями. Рекомендую проверить сгенерированный запрос и сравнить его с желаемым. Используйте для этого консоль отладки.   -  person arogachev    schedule 26.10.2015
comment
Как я сказал ранее, страница просмотра отображается нормально, но данные из запрашиваемой базы данных не могут отображаться в сетке просмотра страницы просмотра. Я проверил запрос запроса, это нормально.   -  person Francis    schedule 26.10.2015


Ответы (1)


Я обнаружил в вашем коде, что вы используете метод all(), который не требуется ActiveDataProvider, потому что метод all() возвращает все строки, но вам нужно передать объект запроса в ActiveDataProvider

$user_id = Yii::$app->user->id;

$subquery = Workload::find()->select(['p.id', 'p.project_name', 'w.user_id', 'w.commit_time', 'w.comment', 'w.workload_type'])
    ->from(['project as p', 'workload as w'])
    ->where(['and','w.user_id = '.$user_id, 'p.id = w.project_id']);

$query = Workload::find()
    ->select(['workloadTeam.project_id', 'wp.project_name', 'workloadTeam.user_id', 'workloadTeam.commit_time', 'workloadTeam.week','workloadTeam.workload_type', 'workloadTeam.comment'])
    ->from(['wp' => $subquery]);

$query->join('INNER JOIN', 'workload as workloadTeam', 'wp.id = workloadTeam.project_id');

$dataProvider = new ActiveDataProvider([
     'query' => $query,
]);

После этого вы можете распечатать $dataProvider->models для отладки, что вы получаете строки из базы данных. Если вы получаете строки, значит, теперь вы можете передать объект $dataProvider в GridView.

person Touqeer Shafi    schedule 26.10.2015
comment
Я удалил all() функцию и распечатал $dataprovider->models, и мне было хорошо, но когда я перехожу к $dataProvider в индексе, данные не отображаются. Я не понимаю как? - person Francis; 26.10.2015