У меня есть форма, которую мне нужно заполнить, чтобы заполнить таблицу пособий. Таблица допусков содержит код сотрудника, имя сотрудника, период времени и количество посещенных дней. Форма содержит только код сотрудника, имя сотрудника и период времени. Таким образом, посещаемые дни должны заполняться автоматически, исходя из количества посещенных дней из таблицы посещаемости с условием на основе периода времени.
Это структура таблицы посещаемости:
| id_attend | employee_id | employee_name | date | time_in | time_out |
| 1 | RYN | RYAN |01.01.2011| 07.00 | 19.00 |
Между тем это структура таблицы пособий
| id_allowance | employee_id | employee_name | period | days_attended |
| 1 | RYN | RYAN | 01.2011 | 1 |
Таким образом, days_attended должен быть заполнен путем подсчета количества посещенных дней на основе employee_id и периода. Я попробовал это в моей модели:
public function count_days_attended()
{
$this->db->select('*, COUNT(attendance.date) as allowance.days_attended');
$this->db->from('attendance');
$this->db->join('allowance','attendance.employee_id= allowance.employee_id');
$this->db->order_by('employee_id','DESC');
$this->db->where(MONTH('attendance.date'), MONTH('allowance.period'));
$query = $this->db->get();
return $query->result();
}
и это мой контроллер:
public function submit(){
$dateTime = new DateTime($this->input->post('period'));
$formatted_date = date_format($dateTime, 'Y-m-d' );
$data = array(
'employee_id'=>$this->input->post('employee_id'),
'employee_name'=>$this->input->post('employee_name'),
'period'=> $formatted_date,
);
$this->absengaji_m->count_days_attended;
$this->absengaji_m->insert($data);
redirect('absengaji');
}
Там нет ошибки, но программа даже не дает никакого ответа на мой код. После того, как я нажал кнопку «Отправить», он все еще показывает 0 на посещенных днях.
Есть ли способ это исправить? : /
Я думаю, что у вас есть несколько проблем здесь. Чтобы погреметь им,
Я не разработчик CodeIgniter, поэтому я не могу помочь вам с определенным синтаксисом, но что-то вроде этого должно вывести вас на правильный путь,
//accept a parameter so you can know which employee
public function count_days_attended( $employee_id ) {
$this->db->select('*, COUNT(attendance.date) as allowance.days_attended');
$this->db->from('attendance');
$this->db->join('allowance','attendance.employee_id= allowance.employee_id');
$this->db->order_by('employee_id','DESC');
$this->db->where(MONTH('attendance.date'), MONTH('allowance.period'));
//add the employee id to your where clause so you are searching for the correct employee only
//$this->db->where() employee id = $employee_id
$query = $this->db->get();
return $query->result(); //you are returning a result here
}
public function submit(){
$dateTime = new DateTime($this->input->post('period'));
$formatted_date = date_format($dateTime, 'Y-m-d' );
$data = array(
'employee_id'=>$this->input->post('employee_id'),
'employee_name'=>$this->input->post('employee_name'),
'period'=> $formatted_date,
);
//save the result in a variable
$days_attended = $this->absengaji_m->count_days_attended( $data['employee_id'] ); //call as a method and pass the employee id to the method
//append to insert query
$data['days_attended'] = $days_attended;
$this->absengaji_m->insert($data);
redirect('absengaji');
}
Других решений пока нет …