みんな私がこれをするのを手伝ってください。私は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 を使用した名前に置き換えるだけです。
上記のコードは、クエリなどでバインドされたパラメーターを使用するなど、いくつかの調整で実行できると確信していますが、これは私にとってはうまくいきました。
コメントや改善点は大歓迎です。私は php を始めて約 8 か月、yii を始めて 3 か月しか経っていません。