如何在Yii Framework中进行记录计数?

时间:2016-03-18 11:53:00

标签: php mysql database yii relationships

我有两张桌子'公司'和'部门'

CREATE TABLE Department (
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
deptName VARCHAR(40),
CompanyId TINYINT UNSIGNED NOT NULL,
FOREIGN KEY (CompanyId) REFERENCES Companies(id) ON DELETE CASCADE,
UNIQUE (deptName))

CREATE TABLE Company (
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
companyName VARCHAR(40),
email VARCHAR(60),
UNIQUE (companyName))

我创建新记录,更新,删除和显示所有记录..但现在我想显示特定公司的部门总数。例如:

A公司有3个部门 B公司有2个部门。 我只想数一些部门。输出电流

ID: 1   
Company Name: CompanyA  
Email: Contact@companyA.com

但我想展示

ID: 1   
Company Name: CompanyA  
Email: Contact@companyA.com
Total Department: 3 //it can be different

这只是一条记录,但我有很多公司在我的输出中显示..部门有不同的表..我必须更改哪些代码以显示部门总数

我在Gii中使用CRUD操作创建的控制器'CompanyController'和'DepartmentController'具有简单的功能..

这是我的index.php

<h1>Companies</h1>

<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
)); ?>

这是我的_view文件

<div class="view">

<b><?php echo CHtml::encode($data->getAttributeLabel('id')); ?>:</b>
<?php echo CHtml::link(CHtml::encode($data->id), array('view', 'id'=>$data->id)); ?>
<br />

<b><?php echo CHtml::encode($data->getAttributeLabel('companyName')); ?>:</b>
<?php echo CHtml::encode($data->companyName); ?>

我不确定应该在哪里计算数据..我已经为部门控制器中的总计部门编写了一个函数,但它不能正常工作是我的功能

public function totalDept()
{
    $CompanyId=1;
    $totalDept=Department::model()->findAll($CompanyId);
    $numberOfDept=count($totalDept);
    if ($numberOfDept> 0) {
        echo "There are" .$numberOfDept. "in this company";
    } else {
        echo 'This company has No Department so far...';
    }

}

当我在我的视图中显示它不起作用..它说属性Department.totaldept未定义

<b><?php echo CHtml::encode($data->getAttributeLabel('Total Departments')); ?>:</b>
<?php echo CHtml::encode(Department::model()->totalDept); ?>
<br />

无论我想做什么,这是正确的方式,或者我做错了,我只是yii的新手,只是想学习yii ..

2 个答案:

答案 0 :(得分:1)

根据Yii的惯例。您应该首先在模型文件中定义CompanyDepartment之间的关系。

在您的情况下 - 公司有很多部门,因此在您的公司模型中,定义如下关系(假设您使用的是Yii 1.x)

public function relations()
{
    return array(
        // other relationships
        'departments' => array(self::HAS_MANY, 'Department', 'CompanyId'),
    );
}

一旦您定义了这种关系,您就可以获得公司部门的计数,如下面的_view文件所示。

echo count($data->departments);

答案 1 :(得分:1)

您可以在公司AR类的relations()方法中定义一个“属性”,它将执行统计查询(默认为计数)。您可以使用“self :: STAT”作为关系类型来执行此操作,请参阅下面的示例:

public function relations()
{
    return array(
        // other relationships
        'totalOfdepartments' => array(self::STAT, 'Department', 'CompanyId'),
    );
}

您可以在此处获取更多信息:http://www.yiiframework.com/doc/guide/1.1/en/database.arr#statistical-query