我有两张桌子'公司'和'部门'
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 ..
答案 0 :(得分:1)
根据Yii的惯例。您应该首先在模型文件中定义Company
和Department
之间的关系。
在您的情况下 - 公司有很多部门,因此在您的公司模型中,定义如下关系(假设您使用的是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