-1

我有一张表格,我需要填写以填写津贴表。津贴表包含员工代码、员工姓名、时间段和出席天数。该表格仅包含员工代码、员工姓名和时间段。因此,需要根据时间段从考勤表中计算出勤天数来自动填写出勤天数。

这是考勤表的结构:

|  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            |

因此,应根据employee_id 和 period 通过计算参加的天数来填充 days_attended。我在我的模型中尝试了这个:

        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

有没有什么办法解决这一问题?:/

4

1 回答 1

2

我认为你在这里有几个问题。让他们吵吵闹闹,

  1. 您没有在 WHERE 子句中指定哪个员工
  2. 你没有正确调用你的方法
  3. 您没有捕获方法的返回
  4. 您没有将结果附加到插入查询。

我不是 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');
}
于 2018-09-12T02:28:30.940 回答