【问题标题】:Count and insert with condition Codeigniter使用条件 Codeigniter 计数和插入
【发布时间】:2018-09-12 01:24:38
【问题描述】:

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

这是考勤表的结构:

|  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

有没有办法解决这个问题? :/

【问题讨论】:

  • 您到底想解决什么问题?听起来它不像您预期​​的那样工作,但是您看到了什么症状?代码运行时是否产生错误?
  • 天哪,我忘了提到我的代码不起作用,它没有显示任何错误,但它也没有给出任何响应@amccormack
  • 重定向是否发生?你检查过你的日志是否有错误?
  • 是的,重定向仍然发生。似乎什么也没发生,正常工作,除了参加的天数仍然是 0。@amccormack

标签: php codeigniter time-and-attendance


【解决方案1】:

我认为您在这里有几个问题。为了让他们吵架,

  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');
}

【讨论】:

  • 哇,谢谢你的回答!将很快尝试,希望这可以工作。在这种事情上我还是新手
  • 没问题。一旦解决了这些问题,您可能会遇到其他问题,但这是调试过程的一部分。只需完成每一项。 var_dump()print_r() 可以成为你最好的朋友。
  • 嘿,尝试了你的答案,是的,它让我遇到了另一个问题。它说 Message: Array to string conversionMessage: Undefined property: AbsenGaji::$count_days_attended 。我想知道,我应该在与 $count_days_attended 相同的函数中使用 print_r() 还是应该创建一个新函数? @克里斯
猜你喜欢
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
相关资源
最近更新 更多