假设我们有三个表,tbl_student,tbl_lesson和tbl_score(student_id,lesson_id,score)。
对于Activedataprovider,我们有:
$query = \app\models\Score::find()
->joinWith('student', false)
->joinWith('lesson', false);
$provider = new \yii\data\ActiveDataProvider([
'query' => $array,
]);
echo GridView::widget([
'dataProvider' => $dataProvider,
]);
因此它提供了一个包含列的输出:student_id,lesson_id,score:
<table border="1">
<tr>
<td> student_id </td>
<td> lesson_id </td>
<td> score </td>
</tr>
<tr>
<td> 1 </td>
<td> 1 </td>
<td> 99.5 </td>
</tr>
<tr>
<td> 1 </td>
<td> 2 </td>
<td> 54 </td>
</tr>
<tr>
<td> 1 </td>
<td> 3 </td>
<td> 87 </td>
</tr>
<tr>
<td> 2 </td>
<td> 1 </td>
<td> 76 </td>
</tr>
<tr>
<td> 2 </td>
<td> 2 </td>
<td> 84 </td>
</tr>
<tr>
<td> 2 </td>
<td> 3 </td>
<td> 69 </td>
</tr>
</table>
&#13;
但我想要的是在第一个COLUMN中显示学生,在第一个ROW中显示课程,然后在表格正文中显示相关的分数:
<table border="1">
<tr>
<td>student_id</td>
<td>lesson_1</td>
<td>lesson_2</td>
<td>lesson_3</td>
</tr>
<tr>
<td>1</td>
<td>99.5</td>
<td>54</td>
<td>87</td>
</tr>
<tr>
<td>2</td>
<td>76</td>
<td>84</td>
<td>69</td>
</tr>
</table>
&#13;
我该怎么做? 提前谢谢。
我知道我可以使用Arraydataprovider,但如Yii2 data providers guide中所述
注意:与Active Data Provider和SQL Data Provider相比,数组数据提供程序效率较低,因为它需要将所有数据加载到内存中。
但我想使用Activedataprovider
来做