伙计们帮我做到这一点。我是 YII 的新手。我想像这样显示每个项目的分支库存。
实际数据库
做这个的最好方式是什么?
伙计们帮我做到这一点。我是 YII 的新手。我想像这样显示每个项目的分支库存。
实际数据库
做这个的最好方式是什么?
您正在寻找的是交叉表或数据透视表。这是一个链接:http ://www.artfulsoftware.com/infotree/qrytip.php?id=523
我一直在寻找同样的东西,并有一个使用 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 替换为您使用的名称即可。
我确信上面的代码可以做一些调整,即在查询等中使用绑定参数,但这对我有用。
非常欢迎任何意见或改进。我只有大约 8 个月进入 php 和 3 个月进入 yii。