2014-01-24 2 views
0

나는 leave_applications 테이블과 employees 테이블을 가지고 있습니다. 직원이 직원 ID와 함께 leave_applications 테이블에 저장된 휴가를 신청할 때. 다음에 직원이 로그인하면 지금까지 신청 한 휴가 신청서가 표시됩니다. 그러나 문제는 모든 종업원이 다른 종업원으로부터 표시되는 경우입니다. 그렇다면 로그인 한 직원 만 휴가 신청서를 볼 수 있도록 제한하는 방법은 무엇입니까? 내 LeaveApplicationsController.php 페이지는 잎을 표시하는 이것이다 :CakePHP에서 로그인 사용자 데이터 만보기

public function index() 
    { 
     $this->LeaveApplication->recursive = 0; 
     $leavereqs = $this->set('leaveApplications', $this->Paginator->paginate()); 
     //return $this->LeaveApplication->Employee->find('all', array('conditions' => array('LeaveApplications.employee_id'=>$this->Auth->user('id')))); 
     return $this->LeaveApplication->find('all'); 
     //echo $log_user_id = $this->Auth->user('role'); die(); 
     //return $this->LeaveApplication->Employee->query("SELECT * FROM leave_applications WHERE employee_id = '$log_user_id'"); 
     //return $this->LeaveApplication->Employee->query("SELECT la.leave_type, la.subject, la.detail, la.from_date, la.to_date, la.applied_on, la.leave_status, la.leave_status_date FROM leave_applications la INNER JOIN employees e ON la.employee_id = e.id INNER JOIN users u ON e.user_id = u.id WHERE la.employee_id = '$log_user_id'"); 
    } 

모두가이 컨트롤러의 인덱스 뷰는 버튼/링크를 잎에 직원이 클릭 할 때 때문에 내가하지 EmployeesController.php에 LeaveApplicationsController.php에서이 코드가 있습니다 라는. 주석 처리 된 코드는 시도했지만 아무도 작동하지 않습니다.

답변

0

인증의 직원 ID가 올바른지 확인하십시오.

를 질의 employee_is은 로그인 한 사용자 인 휴가 테이블,

$employeeId = $this->Auth->user('id'); 
return $this->LeaveApplication->findAllByEmployeeId($employeeId); 
+0

findAllByEmployeeId()? 결과가 여전히 동일하기 때문에 유효한 CakePHP 함수인가? 그러나 함수 이름이 "findAllBy"로 시작하면 – user3224207

+0

답장을 보내 주셔서 감사합니다. 검색하려는 필드를 식별하고 해당 쿼리를 만들려고합니다. '$ employeeId'는 올바른 값을 가지고 있습니까? ('debug ($ employeeId'). 그 ID에 대한 데이터베이스에 데이터가 있는지 확인 하시겠습니까? – cornelb

+0

맞습니다. 적절한 직원 ID를 얻지 못했습니다. 감사합니다. – user3224207

0

인덱스 기능해야 뭔가 같은 :

public function index() 
     { 
      $id = "GET EMPLOYEE ID FROM SESSION OR BY PASSING ARGUMENT"; 
      $this->LeaveApplication->recursive = 0; 
      $conditions = array("employee.id" => "$id"); 
      $leavereqs = $this->set('leaveApplications', 
          $this->Paginator->paginate('MODEL NAME', $conditions) 
         ); 

     } 
+0

답변을 주셔서 감사합니다.하지만 기록이 보이지 않습니다. 로그인 한 사용자의 – user3224207

0

는 직원 로그인, 사용자가 지정해야의 애플리케이션을 남겨하려면 찾기 기능의 Employee_id는 다음과 같습니다.

public function index(){ 

    //Make sure the Employee is logged in 
    $id = $this->Auth->user('id'); 
    if($id){ 

    // get leave applications of logged in Employee 
    $leavereqs = $this->LeaveApplication->find('all', array(
     'conditions'=> array('Employee_id'=>$id) 
    )); 

    $this->set('leavereqs',$leavreqs'); 
    } 
} 

k, $ this-> Auth-> user()를 디버깅하고 데이터베이스에서 Employee_id가 응용 프로그램을 나가는 지 확인하십시오.

0

당신은 마법과 같은 유형을 찾을 수 있습니다 :

findAllByEmployeeId($emp_id) 

만 경우에 데이터베이스에 필드 이름이

을 EMPLOYEE_ID 때를. 데이터를 가져 오는 또 다른 방법은 다음과 같습니다.

find('all',array('conditions' => array('employee_id' => $emp_id));