Codeigniter在非对象上调用成员函数result()

时间:2016-02-13 05:50:03

标签: php codeigniter mysqli

我有这段代码:

public function getJccLineItem($id,$action)
{
    $res = array();
    $q = 'SELECT * FROM jcc_line_items jli,ipo_line_item ili ,line_items li
        WHERE jli.line_item_id= ili.id and li.id = jli.line_item_id
        and ili.dn_number_id in ( Select dn_number from ipo where project_id= '.$id.')';
    $res = $this->db->query($q);
    echo $this->db->last_query();
    $jccLineItemArray = array();
    echo $id;
    print_r($res->result());

    if($action == 'array')
    {

        foreach ( $res->result() as $key => $value) // The error comes in this line
        {
            $jccLineItemArray[ $value->id ] = $value->item_description;
        }
        $res = $jccLineItemArray;


    }  
    else 
    {

        $res = $res->result();
    }

    return $res;
}

错误发生在foreach循环中。我打印了结果,它显示了对象数组中的结果,但是当它转到foreach循环时。它显示此错误

  

"在非对象上调用成员函数result()"

但是当我设置db['default']['db_debug']=true时,它显示查询中缺少$id,而当它为false时,它在对象数组中显示结果并在循环时给出错误。任何帮助将不胜感激。谢谢

控制器代码

public function createInvoice( $id = "" ) 
{        
    if (empty($id)) 
    {
        $id = $this->input->post('dataid');
    }
    echo $id;
    $data['jcc_line_list'] = $this->product_model->getJccLineItem($id,'array');
    $data['jcc_line_lists'] = $this->product_model->getJccLineItem($id,'');
    $data['items'] = $this->product_model->getAllSubInvoice($id);
    $data['single_project'] = $this->product_model->getSingleProject($id);
    $data['site'] = $this->product_model->getAllSiteArray();
    $data['job_types'] = $this->product_model->getAllJobTypeArray();
    $data['title'] = 'Invoice';
    $data['operation'] = 'Create';
    $data['buttonText'] = 'Save';
    $data['id'] = $id;
    $this->load->helper(array('form', 'url'));
    $this->load->helper('security');

    $this->form_validation->set_rules('line_item_id', 'Line Item', 'required|xss_clean|max_length[50]');
    $this->form_validation->set_rules('job_type_id', 'Job Type', 'required|xss_clean|max_length[50]');
    $this->form_validation->set_rules('site_id', 'Site', 'required|xss_clean|max_length[50]');
    $this->form_validation->set_rules('milestone', 'Milestone', 'required|xss_clean|max_length[50]');
    $this->form_validation->set_error_delimiters('<span class="error">', '</span>');


    if ($this->form_validation->run() == FALSE) {
        $this->session->set_flashdata('error_message', validation_errors());
        $this->load->view('admin/viewinvoicesub', $data);
    } else if ($this->form_validation->run() == TRUE) {

        $formData = array(
            'invoice_id' => $id,
            'line_item_id' => $this->form_validation->set_value('line_item_id'),
            'job_type_id' => $this->form_validation->set_value('job_type_id'),
            'site_id' => $this->form_validation->set_value('site_id'),
            'milestone' => $this->form_validation->set_value('milestone'),
        );
        $this->product_model->insertInvoiceSub($formData);
        $this->session->set_flashdata('sucess_message', "Data successfully save !");
        redirect('Products/createInvoice', "refresh");
    } else {
        $this->load->view('admin/viewinvoicesub', $data);
    }
}

1 个答案:

答案 0 :(得分:3)

试试这个并告诉我是否有帮助

public function getJccLineItem($id = '' ,$action = '')
{
    if($id != '')
    {
        $res = array();
        $q = 'SELECT * FROM jcc_line_items jli,ipo_line_item ili ,line_items li
            WHERE jli.line_item_id= ili.id and li.id = jli.line_item_id
            and ili.dn_number_id in ( Select dn_number from ipo where project_id= '.$id.')';
        $res = $this->db->query($q)->result();
        $jccLineItemArray = array();
        if($action == 'array')
        {
            foreach($res as $key => $value) // The error comes in this line
            {
                $jccLineItemArray[ $value->id ] = $value->item_description;
            }
            $res = $jccLineItemArray;
        }
        return $res;
    }
    else
    {
    echo "id is null"; die();
    }
}

你的Controller代码应该是

public function createInvoice( $id = "" ) 
{
    $this->load->helper(array('form', 'url'));
    $this->load->helper('security'); 
    if ($id = "") 
    {
        $id = (isset($this->input->post('dataid')))?$this->input->post('dataid'):3;// i am sure your error is from here
    }   
    $data['jcc_line_list'] = $this->product_model->getJccLineItem($id,'array');
    $data['jcc_line_lists'] = $this->product_model->getJccLineItem($id,'');
    $data['items'] = $this->product_model->getAllSubInvoice($id);
    $data['single_project'] = $this->product_model->getSingleProject($id);
    $data['site'] = $this->product_model->getAllSiteArray();
    $data['job_types'] = $this->product_model->getAllJobTypeArray();
    $data['title'] = 'Invoice';
    $data['operation'] = 'Create';
    $data['buttonText'] = 'Save';
    $data['id'] = $id;
    if($_SERVER['REQUEST_METHOD'] == 'POST')
    {   
        $this->form_validation->set_rules('line_item_id', 'Line Item', 'required|xss_clean|max_length[50]');
        $this->form_validation->set_rules('job_type_id', 'Job Type', 'required|xss_clean|max_length[50]');
        $this->form_validation->set_rules('site_id', 'Site', 'required|xss_clean|max_length[50]');
        $this->form_validation->set_rules('milestone', 'Milestone', 'required|xss_clean|max_length[50]');
        $this->form_validation->set_error_delimiters('<span class="error">', '</span>');


        if ($this->form_validation->run() === FALSE) 
        {
            $this->session->set_flashdata('error_message', validation_errors());
            $this->load->view('admin/viewinvoicesub', $data);
        } 
        else
        {
            $formData = array(
                'invoice_id' => $id,
                'line_item_id' => $this->form_validation->set_value('line_item_id'),
                'job_type_id' => $this->form_validation->set_value('job_type_id'),
                'site_id' => $this->form_validation->set_value('site_id'),
                'milestone' => $this->form_validation->set_value('milestone'),
            );
            $this->product_model->insertInvoiceSub($formData);
            $this->session->set_flashdata('sucess_message', "Data successfully save !");
            redirect('Products/createInvoice/'.$id, "refresh");
        }
    }   
    else 
    {
        $this->load->view('admin/viewinvoicesub', $data);
    }
}