user3224207
user3224207

Reputation: 437

Fetching data from two tables depending upon condition in CakePHP

I have two controllers LeaveApplicationsController and EmployeesController. In LeaveApplicationsController index action I'm displaying leave records of all employees. It is showing fine but what I need is to show only login employees leaves to that employee. I have employee_id as foreign key in leave_applications table. But I am not getting employee_id (which is id) from employees table. I also have users table and each user has one employee associated with it. So when employee is created, before that user is created and newly created user's id is also stored in employees table under unser_id field. So user_id is foreign key in employees table and uniquely identifies the employee.

This is my LeaveApplicationsController.php code:-

public function index()
    {
        $userId = $this->Auth->user('id'); //gets current user's id
        $this->LeaveApplication->recursive = 0;
        $leavereqs = $this->set('leaveApplications', $this->Paginator->paginate());
        $employeeId = $this->Employee->find('all', array('fields'=>array('id'), 'conditions'=>array('Employee.user_id'=>$userId))); // code for getting emp id
        return $this->LeaveApplication->find('all', array('conditions'=>array('LeaveApplication.employee_id'=>$employeeId))); //code for fetching current employee record
    }

But this shows error. Please tell me where am I doing it incorrect? I'm also using $uses to load Employee model in LeaveApplicationsController. Thanks.

Upvotes: 1

Views: 815

Answers (1)

Anubhav
Anubhav

Reputation: 1625

public function index()
    {
        $userId = $this->Auth->user('id'); //gets current user's id
        $this->LeaveApplication->recursive = 0;
        $leavereqs = $this->set('leaveApplications', $this->Paginator->paginate());
        $employeeId = $this->Employee->find('list', array('fields'=>array('id'), 'conditions'=>array('Employee.user_id'=>$userId))); // code for getting emp id
        return $this->LeaveApplication->find('all', array('conditions'=>array('LeaveApplication.employee_id'=>$employeeId))); //code for fetching current employee record
    }

find('all') will return array with index Employee and id

Imp links: find('all'), find('first') and find('list')

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find-first

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find-all

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find-list

Upvotes: 0

Related Questions