-1

我是一名初级 PHP 开发人员。我有一个我写的应用程序,我想用 Yii 重写。到目前为止,大部分内容都非常简单,但我对当前应用程序的一个观点是使用该应用程序的公司喜欢它,我怀疑他们是否会希望它改变。

在这个视图中,有一个看起来很像电子表格的表格(有很多行和列来输入数量)。表格的第一列是项目的名称,其他 7 列代表一周中每一天的项目数量。每个单元格代表行项目和列日期的订单,并有一个输入框。

在数据库中,每个单独的订单是数据库中的一行,显然每个订单只有一个日期列。在纯 PHP 中装配视图很容易,但我不知道如何使用 Yii 来做到这一点。

Yii 的 CGridView 似乎将数据库列映射到数据网格表中的列。我不知道如何在网格视图中有 7 列,当数据库只有一个日期列时,一周中的每一天都有一列。根据 CGridView 中的文档,每一行对应一个数据项。在我看来,每一行都需要 7 个数据项。

问题:现在有什么方法可以用 Yii 做到这一点吗?写一个扩展会是一个好的解决方案吗?Yii 不会在这个观点上帮助我吗?或者除了CGridView还有什么?如果 Yii 可以做到,我该从哪里开始?CActiveDataProvider 中的东西,扩展 CDataColumn,调整模型?

我不太确定如何继续,如果不合适的话,我也不想将应用程序移植到 Yii 上。希望这足以清楚地传达问题所在。提前致谢。

4

1 回答 1

1

一种选择是为您的项目表创建一些关系。我假设它们已经与订单表相关。您可以在项目模型中为一周中的每一天创建一个STAT 关系,例如:

public function relations()
{
    return array(
        ...
        'sundayOrderCount' => array(self::STAT, 'Orders', 'item_id', 'condition'=>'DAYNAME(`order_date`) = "Sunday"',
        ...
    );
}

item_idOrders 表中 Items 的 fk 在哪里,并且order_date是 Orders 表中下订单时的时间戳)

在上面的示例中,您应该能够从表中获取所有项目并获得周日的每个项目的总销售额,如下所示

$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',
        ),
    ),
));

没有测试它,但我希望这能给你一些东西。

于 2012-10-25T09:08:10.077 回答