我有两张桌子“公司”和“部门”
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))
我正在创建新的记录,更新,删除和显示所有的记录。但是现在我想显示特定company..For示例的部门总数:
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 />
无论我试图做什么,这是正确的方式,还是我做错了,我只是新手,只是试着去学习。
发布于 2016-03-18 04:05:28
按照Yii的惯例。您应该首先在模型文件中定义Company
和Department
之间的关系。
在您的案例中- Company有许多部门,所以在您的公司模型中,定义如下关系(假设您使用的是YII1.x)
public function relations()
{
return array(
// other relationships
'departments' => array(self::HAS_MANY, 'Department', 'CompanyId'),
);
}
一旦定义了这种关系,您就可以获得公司部门的计数,如下面_view
文件所示。
echo count($data->departments);
发布于 2016-03-18 06:31:09
您可以简单地在Company 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
https://stackoverflow.com/questions/36083667
复制