YII2 Activedataprovider自定义模板

时间:2016-01-31 18:03:25

标签: yii2

假设我们有三个表,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;
&#13;
&#13;

但我想要的是在第一个COLUMN中显示学生,在第一个ROW中显示课程,然后在表格正文中显示相关的分数:

&#13;
&#13;
<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;
&#13;
&#13;

我该怎么做? 提前谢谢。

我知道我可以使用Arraydataprovider,但如Yii2 data providers guide中所述

  

注意:与Active Data Provider和SQL Data Provider相比,数组数据提供程序效率较低,因为它需要将所有数据加载到内存中。

我想要的: generated by Arraydataprovider

但我想使用Activedataprovider

来做

0 个答案:

没有答案