0

我的数据库中有两个表,用于显示基于网格的信息表。目前我的代码只显示一张表的信息(代码如下)

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

我因为我有容量,所以我也想根据与第二张桌子上的房间号相关联的行数来获得入住率。我知道如果不使用 PHP,这可能看起来很简单,但我是 Yii 的新手,不明白如何在另一个模型上执行计数。要找到入住人数,我需要使用表 1 的第一列的房间号。

简单地说:我需要从第一列开始 count() 与房间号相关的行。我需要显示房间和容量的原始表格内容,但这两列之间有占用。我将如何使用 Yii 做到这一点?

两个表的 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 中的一个示例,说明如何使用关系显示来自相关模型的计数。在我的项目中,这显示了用户类型列表旁边给定类型的用户数量。

在我的项目中,下面的文件位于 views/usertype/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 记录的“用户”关系并计算相关用户的数量。

这些关系消除了编写任何复杂 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 回答