YII Инвентаризация системы контроля выпуска
Ребята, помогите мне сделать это. Я новичок в YII. Я хочу отображать каждый элемент ветки акций, как это.
фактическая база данных
Каков наилучший способ сделать это?
2 ответа
То, что вы ищете, это кросс-таблица или сводная таблица. Вот ссылка: 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;
}
Вот код для Вей
$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.