Umerm
Umerm

Reputation: 155

Codeigniter Call to a member function result() on a non-object

I have this code:

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

The error is in the foreach loop. I have printed the result and it shows the result in object array but when it goes to foreach loop. It show this error

"Call to a member function result() on a non-object "

But when I set db['default']['db_debug']=true , it shows that the $id is missing from the query whereas when it was false it was showing result in object array and giving error at loop. Any Help would be appreciated.Thanks

Controller Code

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

Upvotes: 3

Views: 4473

Answers (1)

Praveen Kumar
Praveen Kumar

Reputation: 2408

Try this and let me know if that helps

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

And your Controller code should be

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

Upvotes: 3

Related Questions