0

データベースに、グリッド ベースの情報テーブルを表示するために必要な 2 つのテーブルがあります。現在、私が持っているコードは、1 つのテーブルの情報のみを表示します (以下のコード)

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'aux-room-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'room',
        'capacity',
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

容量があるので、2 番目のテーブルにある部屋番号に関連付けられている行数に基づいて、占有率も取得したいと考えています。PHP を使用しない場合、これはかなり単純に思えるかもしれませんが、私は Yii を初めて使用し、別のモデルでカウントを実行する方法を理解していません。占有率を調べるには、テーブル 1 の最初の列である部屋番号を使用する必要があります。

簡単に言えば、最初の列から部屋番号に関連付けられた行を count() する必要があります。部屋と容量の元のテーブルの内容を表示する必要がありますが、これら 2 つの列の間に占有率があります。Yii を使用してこれを行うにはどうすればよいでしょうか。

2 つのテーブルの SQL:

CREATE  TABLE IF NOT EXISTS `cs_people`.`aux_room` (
  `room` VARCHAR(20) NOT NULL ,
  `capacity` VARCHAR(20) NULL ,
  PRIMARY KEY (`room`) )
ENGINE = InnoDB;

CREATE  TABLE IF NOT EXISTS `cs_people`.`room_desk` (
  `userid` VARCHAR(8) NOT NULL ,
  `room` VARCHAR(20) NULL ,
  `desk` VARCHAR(250) NULL ,
  PRIMARY KEY (`userid`) ,
  INDEX `room_desk.room_idx` (`room` ASC) ,
  CONSTRAINT `room_desk.userid`
    FOREIGN KEY (`userid` )
    REFERENCES `cs_people`.`people` (`userid` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `room_desk.room`
    FOREIGN KEY (`room` )
    REFERENCES `cs_people`.`aux_room` (`room` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;
4

2 に答える 2

1

これを実現するには、yii モデル内でリレーションを使用するのが最善です。これを読んで、モデルに必要な関係を実装してください。以下は、リレーションを使用して関連モデルからカウントを表示する方法の yii の例です。私のプロジェクトでは、ユーザー タイプのリストの横に特定のタイプのユーザー数が表示されます。

私のプロジェクトでは、以下のファイルはビュー/ユーザータイプ/admin.php にあります。これは、管理ビュー グリッドの場合と同じです。インデックス ビューにも同じことが当てはまります。

<?php
$this->widget('bootstrap.widgets.TbGridView', array(
    'id' => 'user-type-grid',
    'dataProvider' => $model->search(),
    'filter' => $model,
    'template' => '{items}',
    'columns' => array(
        'id',
        'name',
        array('header' => 'Users', 'value' => 'count($data->users)'),
        array(
            'class' => 'bootstrap.widgets.TbButtonColumn',
        ),
    ),
));
?>

$model 変数は、UserType コントローラーの actionAdmin() メソッドから渡されます。Gii がこれを設定する必要があります。列配列の引用符内で $data 変数を使用すると、個々のレコードのプロパティにアクセスできることがわかります。この例では、UserType レコードの「users」リレーションにアクセスし、関連するユーザーの数をカウントします。

これらの関係により、複雑な SQL を記述する必要がなくなります。Yii はデータを照会し、必要なすべての結合を実行します。

于 2013-03-26T12:03:08.330 に答える
0

Yii 固有のソリューションではありませんが、個人的には、ビューを使用してそのデータをデータベースから直接取得します。

何かのようなもの:

CREATE VIEW rooms_with_occupancy 
AS
    SELECT r.*, count(o.*) as occupant_count
    FROM rooms r
    LEFT JOIN occupancy o ON o.room_id = r.id
    GROUP BY r.id

ウィジェットをバインドするときrooms_with_occupancyは、テーブルの代わりにビューを使用しroomsます。

ビューの作成の詳細については、公式ドキュメントを参照してください。

于 2013-03-25T19:05:30.153 に答える