我是PHP开发人员的开始。我有一个我写的应用程序,我想用Yii重写。到目前为止大部分内容非常简单,但我在当前的应用程序中有一个视图,该公司使用该应用程序喜欢,我怀疑他们会希望它改变。
在此视图中,有一个看起来很像电子表格的表单(输入数量的行和列很多)。表单的第一列是项目的名称,其他7列表示一周中每天的项目数量。每个单元格代表行项目和列日期的顺序,并有一个输入框。
在数据库中,每个订单都是数据库中的一行,显然每个订单只有一个日期列。在纯PHP中很容易掌握视图,但我不知道如何使用Yii来实现这一点。
Yii的CGridView似乎将数据库列映射到数据网格表中的列。我无法弄清楚如何在网格视图中有7列,一个数据库只有一个日期列,每周一天。根据CGridView中的文档,每行对应一个数据项。在我看来,每行需要7个数据项。
问题: 有没有办法和Yii现在这样做? 编写扩展是一个很好的解决方案吗? Yii根本不会帮助我这个观点吗?或者还有除CGridView之外的东西? 如果Yii可以做到,我从哪里开始? CActiveDataProvider中的东西,扩展CDataColumn,调整模型?
我不确定如何继续,并且如果不合适,不想将应用程序移植到Yii太远。希望这足以说明问题所在。提前谢谢。
答案 0 :(得分:1)
一种选择是为items表创建一些关系。我假设它们已经与订单表相关。您可以在商品模型中为一周中的每一天创建STAT relation,例如:
public function relations()
{
return array(
...
'sundayOrderCount' => array(self::STAT, 'Orders', 'item_id', 'condition'=>'DAYNAME(`order_date`) = "Sunday"',
...
);
}
(其中item_id
是订单表中商品的fk,而order_date
是订单生成时订单表中的时间戳)
在上面的示例中,您应该能够从表格中获取所有项目并获得周日的每个项目总销售额
$model->sundayOrderCount;
然后像这样在CGridView中弹出:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'item-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'name',
array(
'header'=>'Sunday Sales',
'value'=>'$data->sundayOrderCount',
),
),
));
没有测试过,但我希望能给你一些东西。