2012-12-04 2 views
1

스태프가 강좌 및 어셈블리에 참여한 시간의 합계에 대한 결과를 얻지 못했습니다.CakePHP - 다른 관계의 SUM 데이터 표

내 컨트롤러에서
public $belongsTo = array('Staff','Course','Assembly'); 

이 코드 쓰기 시도 : - -이 :

모델에서
staffs 
+---+-------+-----------+ 
| id| Name | Department| 
+---+-------+-----------+ 
| 1 | Joe | HR  | 
| 2 | Andra | Support | 
| 3 | Khan | HR  | 
| 4 | Toll | HR  | 
| 5 | Gosh | Support | 
| 6 | Rama | Support | 
+---+-------+-----------+ 



attendances 
+---+---------+-----------+--------------+ 
|id | name_id | course_id | assembly_id | 
+---+---------+-----------+--------------+ 
| 1 | 1 | 101  |    | 
| 2 | 1 | 102  |    | 
| 3 | 1 |   | 501   | 
| 4 | 2 | 102  |    | 
| 5 | 3 |   | 502   | 
| 6 | 3 | 103  |    | 
| 7 | 4 | 101  |    | 
| 8 | 4 |   | 501   | 
| 9 | 4 | 102  |    | 
+---+---------+-----------+--------------+  


courses 
+-------+-----------+-------+ 
| id | name  | hours | 
+-------+-----------+-------+ 
| 101 | courses_1 | 8  | 
| 102 | courses_2 | 6  | 
| 103 | courses_3 | 9  | 
+-------+-----------+-------+ 


assembly 
+-------+---------------+-------+ 
| id | name   | hours | 
+-------+---------------+-------+ 
| 501 | assembly_1 | 2  | 
| 502 | assembly_2 | 4  | 
+-------+---------------+-------+ 

> 출석 이미 관계 추가 -이 : 여기 내 데이터베이스입니다

$view = $this->Staff->find('all',array(
'fields' => array('SUM(COALESCE(Course.hours,0))+SUM(COALESCE(Assembly.hours,0)) as ec_count'),'recursive'=>2)); 
$this->set('view', $view); 

을하지만 그것을 오류를 반환합니다 .. (내가 여기에 뭔가 잘못한 것처럼 보입니다)

이 조건으로 코드를 작성하는 방법은 ap 이 같은보기를 통해 배 : -

+---+-------+-----------+------------+ 
| id| Name | Attend | Total Hour | 
+---+-------+-----------+------------+ 
| 1 | Joe | course_1 |  16 | 
| |  | course_2 |   | 
| |  | assembly_1|   | 
| 2 | Andra | course_2 |  6 | 
| 3 | Khan | assembly_2|  13 | 
| |  | course_3 |   | 
| 4 | Khan | course_1 |  16 | 
| |  | assembly_1|   | 
| |  | course_2 |   | 
| 5 | Gosh | -   |  0  | 
| 6 | Rama | -   |  0  | 
+---+-------+-----------+------------+ 
+0

cake2.x를 사용하고 있습니까? 필드와 사용자 지정 SQL을 혼합하는 대신 여기에 가상 필드를 사용하십시오. 읽고 이해하는 것이 더 깔끔하고 작업하기에 더 깨끗합니다. – mark

+0

cake2를 사용하고 있습니다. 그러나 새로운 가상 필드를 사용해보십시오. 가상 필드를 사용하여 이해하기 쉬운 안내서를 찾으십시오. @mark –

답변

0

당신이하고있는 않는 조인 (CakePHP Joins 참조), 당신이 CakePHP를 실제로 개별 쿼리를 실행하므로, 그와 같은 금액을받을 수 후 결합하고 반환하지 않습니다 자료.

나는 'staffs'테이블 내의 Staff.course_hoursStaff.assembly_hours 필드의 총 시간을 추적하는 것이 가장 좋습니다. Assembly.hoursCourse.hours에 여전히 개별 행을 유지할 수 있지만 afterSave() (CakePHP afterSave 참조) 콜백 (또는 이와 비슷한 내용)에서 근무 시간 필드를 업데이트하십시오.

그러면 가상 필드 (CakePHP Virtual Fields 참조)를 total_hours으로 설정하여 원하는대로 정렬하거나 표시하거나 사용할 수 있습니다.

또는 조인을 빌드하고 단일 (다소 복잡하지만) 쿼리로 수행 할 수 있습니다.

+0

조언을 주셔서 감사합니다. 전 직원 테이블에 총계를 추적하고 싶습니다. –