Search code examples
arrayscodeigniter-2

codeigniter multiple table joins


function in codeigniter model is not working. I'm getting http error 500 because of below code in codeigniter model function. if I remove this code.. code is working fine.

function get_ad_by_user($a,$b)
    {
        $this->db->select('title,ci_categories.category,ci_subcategories.subcategory,state,city,locality,ad_website,description,phone_number,address,image_token1,image_token2');
        $this->db->from('ci_pre_classifieds');
        $this->db->join('ci_categories', 'ci_categories.category_id = ci_pre_classifieds.category');
        $this->db->join('ci_subcategories', 'ci_subcategories.subcategory_id = ci_pre_classifieds.sub_category');
        $this->db->where('ci_pre_classifieds.id',$a);
        $this->db->where('ci_pre_classifieds.ad_string_token',$b);
        $q=$this->db->get();
        $this->db->last_query();
        log_message('debug','******query'.$this->db->last_query().'********');
        if($q->num_rows()==1)
        {
            foreach($q->result_array() as $row)
            {
                $data['title]=$row['title'];
                $data['category']=$row['ci_categories.category'];
                $data['sub_category']=$row['ci_subcategories.subcategory'];
                $data['state']=$row['state'];
                $data['locality']=$row['locality'];
                $data['ad_website']=$row['ad_website'];
                $data['description']=$row['description'];
                $data['phone_number']=$row['phone_number'];
                $data['address']=$row['address'];
            }
        }
        else
        {
            $data['message']="sorry either classified expired or deleted";
        }

        return $data;
    }

I'm getting error in for each block..if I remove everything working...How to copy $row array in $data array


Solution

  • $data['title]=$row['title']; has a ' missing.

    This could be the reason but without that error message, it's hard to tell.

    Also, you may want to reduce the function to the following:

    function get_ad_by_user($a,$b)
    {
        $data = array();
    
        $this->db->select('title,ci_categories.category,ci_subcategories.subcategory,state,city,locality,ad_website,description,phone_number,address,image_token1,image_token2');
        $this->db->from('ci_pre_classifieds');
        $this->db->join('ci_categories', 'ci_categories.category_id = ci_pre_classifieds.category');
        $this->db->join('ci_subcategories', 'ci_subcategories.subcategory_id = ci_pre_classifieds.sub_category');
        $this->db->where('ci_pre_classifieds.id',$a);
        $this->db->where('ci_pre_classifieds.ad_string_token',$b);
        $q=$this->db->get();
        log_message('debug','******query'.$this->db->last_query().'********');
        if($q->num_rows()==1)
        {
            $data[] = $q->row_array(); 
        }
        else
        {
            $data['message']="sorry either classified expired or deleted";
        }
    
        return $data;
    }
    

    If you are only returning one row in your query, you can simply use $q->row_array() or $q->row() to return the single row.

    Just in case, I would also declare $data = array() at the start of your get_ad_by_user function, otherwise it "could" complain that $data does not exist.