YII库存控制系统问题

时间:2013-07-25 15:08:09

标签: mysql activerecord yii inventory-management

伙计们帮助我做到这一点。我是YII的新手。我想像这样显示每个分支股票。

enter image description here

实际数据库

enter image description here

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

您正在寻找的是交叉表或数据透视表。这是一个链接:http://www.artfulsoftware.com/infotree/qrytip.php?id=523

答案 1 :(得分:1)

我一直在寻找相同的东西,并使用CSqlDataProvider有一个解决方案。需要注意的是,在使用CSqlDataProvider时,它会返回一个不同于返回对象的CActiveDataProvider的数组。

这是型号代码

public function displayStock($id)
{
    $sql='SELECT product_id, COUNT(*) as productCount FROM stock WHERE assigned_to = 2 GROUP BY product_id';
    $dataProvider=new CSqlDataProvider($sql, array(


        'pagination'=>array(
            'pageSize'=>10,
        ),
    ));
    return $dataProvider;
}

这是veiw的代码

$stockDataProvider = Stock::model()->displayStock(Yii::app()->user->id);
$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'stock-grid',
    'ajaxUpdate' => true,
    'template'=>'{items}{summary}{pager}',
    'dataProvider'=>$stockDataProvider,
    'columns'=>array(

        'product_id',
        array(
                'name'=>'test',
                'value'=>'$data["productCount"]'
            ),


        array(
            'class' => 'CButtonColumn',
            'template' => '{view} {update}',

        ),

    ),
));

在模型中定义SQL语句时,您可以看到我们已将COUNT(*)设置为productCount。然后在视图中我们在列数组中引用该名称,如此

array(
                'name'=>'test',
                'value'=>'$data["productCount"]'
            ),

只需将productCount替换为您使用过的名称即可。

我确信上面的代码可以做一些调整,即在查询中使用Binded params等,但这对我有用。

非常欢迎任何评论或改进。我只有8个月的时间进入PHP,3个月进入yii。