2016-03-18 6 views
0

У меня есть две таблицы «Компания» и «Департамента»Как сделать подсчет записей в Yii Framework?

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)) 

Im создания новых записей, обновление, удаление и показывать все записи .. Но сейчас я хочу показать Общее количество отделов для конкретного company..For пример:

Компания A имеет 3 отдела Компания B имеет 2 отдела. Я просто хочу подсчитать количество отделов. Выходной ток

ID: 1 
Company Name: CompanyA 
Email: [email protected] 

, но я хочу, чтобы показать

ID: 1 
Company Name: CompanyA 
Email: [email protected] 
Total Department: 3 //it can be different 

Это только одна запись, но у меня есть много компаний, показывающих в моем выходе .. Департамент имеет другую таблицу .. какой код ли я придется изменить, чтобы показать общее количество отделов

у меня есть диспетчерских CompanyController 'и «» DepartmentController создана при CRUD операции в Gii имеют простые функции ..

Это мой 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, просто пытаясь узнать юй ..

ответ

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); 
+0

Я уже определил отношения в Департаменте \t 'возвращение массива ( \t \t \t 'отделов => массив (самообеспечение :: HAS_MANY, 'Отдел', 'CompanyID')' и в модели компании 'возвращение массива ( \t \t \t 'компания'=> массив (самообеспечение :: BELONGS_TO, 'Компании', 'Compa nyId '), \t \t); ' –

+0

Тогда часть кода, которую я поделил в своем ответе, будет работать для подсчета числа сотрудников компании. – yetanotherse

+0

Ah Спасибо, это сработало ... –

1

Вы можете просто определить «атрибут» в ваших отношениях (метод) вашего класса AR компании, которая будет выполнять статистический запрос (по умолчанию граф).Вы можете сделать это с помощью «собственного :: 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

+0

Да, спасибо, это сработало –

 Смежные вопросы

  • Нет связанных вопросов^_^