0

みんな私がこれをするのを手伝ってください。私はYIIが初めてです。このように各商品の支店在庫を表示したいです。

ここに画像の説明を入力

実際のデータベース

ここに画像の説明を入力

これを行う最善の方法は何ですか?

4

2 に答える 2

2

あなたが探しているのは、クロスタブまたはピボットテーブルです。ここにリンクがあります: http://www.artfulsoftware.com/infotree/qrytip.php?id=523

于 2013-07-25T19:51:14.223 に答える
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 を使用した名前に置き換えるだけです。

上記のコードは、クエリなどでバインドされたパラメーターを使用するなど、いくつかの調整で実行できると確信していますが、これは私にとってはうまくいきました。

コメントや改善点は大歓迎です。私は php を始めて約 8 か月、yii を始めて 3 か月しか経っていません。

于 2013-09-18T09:53:49.507 に答える