Yii2 Gridview未在索引页中显示数据
我使用模型搜索来过滤和查询控制器中的所有数据,并将数据发送回视图。查询正常,但视图中无法显示数据。我不知道怎么解决它 这是我的模型搜索:Yii2 Gridview未在索引页中显示数据,gridview,yii2,dataprovider,Gridview,Yii2,Dataprovider,我使用模型搜索来过滤和查询控制器中的所有数据,并将数据发送回视图。查询正常,但视图中无法显示数据。我不知道怎么解决它 这是我的模型搜索: $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']) ->fro
$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,
]); ?>
我在代码中发现,您正在使用ActiveDataProvider不需要的all方法,因为all方法返回所有行,但您需要将查询对象传递给ActiveDataProvider
之后,您可以打印$dataProvider->models以进行调试,以便从数据库中获取行。如果您正在获取行,则意味着您现在可以将$dataProvider对象传递给GridView。什么是不能显示数据?根本没有GridView,或者它显示0条记录?另外,请提供在视图中显示GridView的完整代码。我的意思是没有显示数据,但查询很好。查看页面正常显示,没有数据。请添加显示GridView的其余代码。这是查看页面完整代码的链接:最好将代码直接添加到答案,而不是将其发布到外部资源,尤其是当代码不太长时。但我现在可以看到GridView显示正常,一开始我想你可能忘记了echo,所以问题与0条记录有关。我建议检查生成的查询并将其与所需的查询进行比较。使用调试控制台。我删除了所有函数并打印$dataprovider->models,感觉很好,但当我在索引中传递给$dataprovider时,它不会显示数据。我不明白怎么做?
$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,
]);