2014-01-24 3 views
0

У меня есть таблица leave_applications и таблица сотрудников. Когда сотрудник подает заявку на отпуск, который хранится в таблице 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'"); 
    } 

Пожалуйста, обратите внимание, что у меня есть этот код в LeaveApplicationsController.php не EmployeesController.php, потому что, когда работник нажимает на все кнопки оставляет/ссылку Индексный этого контроллера является называется. Прокомментированный код - это то, что я пробовал, но ни один из них не работает.

ответ

0

Убедитесь, что идентификатор сотрудника от Auth в порядке.

Запроса отпуск таблица, где employee_is является зарегистрированным пользователем

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

findAllByEmployeeId()? Является ли это действительной функцией CakePHP, потому что результат все тот же. Но все же спасибо за ваш ответ – user3224207

+0

, когда имя функции начинается с «findAllBy», оно попытается определить поле, которое вы хотите найти, и сделать соответствующий ответ. Имеет ли значение '$ employeeId' правильное значение? ('debug ($ employeeId') .Вы уверены, что у вас есть данные в базе данных для этого ID? – cornelb

+0

Да, вы правы. Я не получал должного идентификатора сотрудника. Спасибо. – 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, вы должны указать 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)); 
Смежные вопросы