这个PHP代码有什么问题?

时间:2011-05-09 18:10:47

标签: php codeigniter

我有两个数据库表,一个用于配额,一个用于扣除。我想计算净工资。

我正在使用CodeIgniter。这是我目前的代码:

function get_allowances($eid)
{
    $this->db->from('allowances');
    $this->db->where('eid',$eid);
    $query = $this->db->get();

    if($query->num_rows()==1)
    {
        return $query->row();
    }
    else
    {
        //Get empty base parent object, as $item_id is NOT an item
        $salary_obj=new stdClass();

        //Get all the fields from items table
        $fields = $this->db->list_fields('allowances');

        foreach ($fields as $field)
        {
            $salary_obj->$field='';
        }

        return $salary_obj;
    }
}

function get_deductions($eid)
{
    $this->db->from('deductions');
    $this->db->where('eid',$eid);
    $query = $this->db->get();

    if($query->num_rows()==1)
    {
        return $query->row();
    }
    else
    {
        //Get empty base parent object, as $item_id is NOT an item
        $salary_obj=new stdClass();

        //Get all the fields from items table
        $fields = $this->db->list_fields('deductions');

        foreach ($fields as $field)
        {
            $salary_obj->$field='';
        }

        return $salary_obj;
    }
}

并在控制器中,

function net_salary($eid)
{
    $allownces[] = $this->Salary->get_allowances($eid);
    $deductions[] = $this->Salary->get_deductions($eid);

    return $net_salary = array_sum($allownces) - array_sum($deductions);
}

我的net_salary()函数给出了0的结果。我做错了什么,我该如何解决?

2 个答案:

答案 0 :(得分:1)

具有复数名称的模型仅返回单个对象

所以你最终得到的是......

Array
(
    [0] => allowance_object
)

Array
(
    [0] => deduction_object
)

虽然我们确实需要您的数据库架构,但请尝试此操作(并对扣除进行相同的编辑)...

function get_allowances($eid)
{
    $this->db->from('allowances');
    $this->db->where('eid',$eid);
    $query = $this->db->get();

    if($query->num_rows()==1)
    {
        return $query->row_array();  //<--- return an Array
    }
    else
    {
        // make an array instead of object
        $salary_obj = array();

        //Get all the fields from items table
        $fields = $this->db->list_fields('allowances');

        foreach ($fields as $field)
        {
            $salary_array[$field] = 0;   //<---- add array keys and set to integer 0 instead of empty string.
        }

        return $salary_array;
    }
}

然后在你的net_salary函数

function net_salary($eid)
{
    $allownce = $this->Salary->get_allowances($eid);
    $deduction = $this->Salary->get_deductions($eid);

    return array_sum($allownce) - array_sum($deduction);
}

答案 1 :(得分:0)

尝试这样的事情:

function get_values($eid, $table_name)
{
    $this->db->where('eid',$eid);
    $query = $this->db->get($table_name);

    $salary_obj = $query->result();

    $values = array();
    foreach($salary_obj as $row){
        $values[] = $row->value_column_name;
    }

    return $values;
}

其中value_column_name是所需值所在的表列(filedname)的名称。

呼叫控制器:

function net_salary($eid)
{
    $allownces = $this->Salary->get_values($eid, 'allowances');
    $deductions = $this->Salary->get_values($eid, 'deductions');

    return $net_salary = array_sum($allownces) - array_sum($deductions);
}