15

One of my CodeIgniter Controller functions needs to call a recursive function as part of its functionality. The function call chokes if I put it inside the controller class, and it can't access database functions ($this->db->get()) if I put it outside the class. Would making it a helper function fix this problem?

Saty
  • 22,443
  • 7
  • 33
  • 51
Rorrik
  • 270
  • 1
  • 3
  • 15

4 Answers4

38

You can get instance:

 $CI =& get_instance();

After that you will be able to use $CI->db for queries..

Saty
  • 22,443
  • 7
  • 33
  • 51
Svetoslav
  • 4,686
  • 2
  • 28
  • 43
  • Brilliant, after a little reading that is exactly what I'm looking for. – Rorrik Apr 08 '13 at 20:44
  • Why it is down voted? Please let us know what is wrong with this. – shasi kanth May 07 '14 at 13:11
  • @svetoslav but is correct doing so in a MVC point of view? just wondering, im new to this – gepex Apr 07 '20 at 01:34
  • @gepex this is answer made 7 years ago. Normally it is not what we usually see today and we can say that it is against MVC. However this is the way it was working at CodeIgniter until v4, solution written probably about 10 years ago.. (or even more) .. – Svetoslav Apr 07 '20 at 05:13
8

If you want to use $this in libraries, helpers, and access all the methods:

    $this->ci =& get_instance();
    $this->ci->load->database();

You can do also:

    $this->ci->config->item('languages');

or

    $this->ci->load->library('session');
Sangar82
  • 5,070
  • 1
  • 35
  • 52
  • That's a great thread, explains how to use get_instance() once you know you want to use get_instance(). – Rorrik Apr 09 '13 at 14:58
6

We can define a function in helper

if (!function_exists('getRecordOnId'))
{
    function getRecordOnId($table, $where){
        $CI =& get_instance();
        $CI->db->from($table);
        $CI->db->where($where);
        $query = $CI->db->get();
        return $query->row();
    }
}

and we can call from view like

$recordUser = getRecordOnId('users', ['id' => 5]); //here 5 is user Id which we can get from session or URL.
Naveed Ramzan
  • 3,565
  • 3
  • 25
  • 30
-2
 //Select Data:

$this->db->select(‘fieldname seperated by commas’);

$this->db->from(‘table’);

$query = $this->db->get();

$results=$query->result() ;

//Joins:

$this->db->select(‘*’);
$this->db->from(‘table1′);
$this->db->join(‘table2′, ‘table2.id = table1.id’);

$query = $this->db->get();

We may get it from http://skillrow.com/codeignitor-database-functions/

kamal
  • 5
  • 1