Mencantumkan kode program di posting Anda, tolong ikuti aturan yang sesuai, baca http://diskusiweb.com/discussion/39204/aturan-cara-menyisipkan-kode-program-di-diskusiweb
Tolong pilih kategori sesuai, jenis posting (pertanyaan atau bukan) dan sertakan tag/topik yang sesuai misal komputer, php, mysql, dll. Promosi atau posting tidak pada tempatnya akan kami hapus.
Menanggulangi masalah Active Record WHERE dan OR WHERE pada Codeigniter
  • kristkrist
    Posts: 625
    Dalam Framework Codeigniter Reactor versi 2.0.2 (versi terbaru) saya sering mendapatkan masalah pada Active Record WHERE, OR_WHERE, LIKE dan OR_LIKE.

    Seperti kasus dibawah ini yang menginginkan sort database dengan menggunakan class Active Record WHERE dan OR_WHERE.

    Contoh pada model :
    function item($cat_type, $cat_id){	
    // Type
    $this->db->where('type', $cat_type);
    // ID
    $this->db->where('cat1', $cat_id);
    $this->db->or_where('cat2', $cat_id);
    // ORDER
    $this->db->order_by('id_item', 'desc');
     
    $query = $this->db->get('item');
    return $query->result();
    }

    Contoh diatas adalah fungsi yang menginginkan query seperti :
    SELECT * 
    FROM item
    WHERE type = '$cat_type'
    AND (cat1 = '$cat_id' OR cat2 = '$cat_id')

    Akan tetapi Active Record tersebut tidak memberikan hasil seperti contoh query SQL yang dimaksud.
    Codeigniter membaca fungsi tersebut seperti :
    SELECT * 
    FROM item
    WHERE type = '$cat_type'
    AND cat1 = '$cat_id'
    AND cat2 = '$cat_id'


    Sama halnya seperti ketika menggunakan LIKE dan OR_LIKE. Seperti contoh kasus dibawah ini
    function item($search_type, $search_key){	
    // Type
    $this->db->where('type', $search_type);
    // ID
    $this->db->like('title', $search_key);
    $this->db->or_like('content', $search_key);
    // ORDER
    $this->db->order_by('id_item', 'desc');
     
    $query = $this->db->get('item');
    return $query->result();
    }

    Contoh diatas adalah fungsi yang menginginkan query seperti :
    SELECT * 
    FROM item
    WHERE type = '$search_type'
    AND (title LIKE '%$cat_id%' OR content LIKE '%$cat_id%')

    Akan tetapi Active Record tersebut tidak memberikan hasil seperti contoh query SQL yang dimaksud.
    Codeigniter membaca fungsi tersebut seperti :
    SELECT * 
    FROM item
    WHERE type = '$search_type'
    AND title LIKE '%$cat_id%'
    AND content LIKE '%$cat_id%'


    SOLUSI
    Belum jelas kenapa masalah tersebut ada pada Active Record.
    Active Record tidak mengenali WHERE dan OR_WHERE ketika ada 1 atau lebih statement WHERE diatasnya sebelum WHERE dan OR_WHERE tersebut digunakan. Begitupun halnya seperti LIKE dan OR_LIKE ketika statement WHERE ditempatkan diatasnya.

    Tetapi masalah tersebut dapat diatasi dengan menggunakan fungsi seperti ini :
    Jika menggunakan WHERE dan OR_WHERE, maka gunakan fungsi OR_WHERE seperti berikut :
    function item($cat_type, $cat_id){	
    // Type
    $this->db->where('type', $cat_type);
    // ID
    $this->db->where("(cat1 = '".$cat_id."' OR cat2 = '".$cat_id."')", NULL);
    // ORDER
    $this->db->order_by('id_item', 'desc');
     
    $query = $this->db->get('item');
    return $query->result();
    }


    Jika menggunakan LIKE dan OR_LIKE, maka gunakan fungsi OR_LIKE seperti berikut :
    function item($search_type, $search_key){	
    // Type
    $this->db->where('type', $search_type);
    // ID
    $this->db->where("(title LIKE \'%'".$search_key."'%\' OR content LIKE \'%'".$search_key."'%')", NULL);
    // ORDER
    $this->db->order_by('id_item', 'desc');
     
    $query = $this->db->get('item');
    return $query->result();
    }


    Semoga jika ada yang mempunyai masalah seperti ini dapat terbantu dan jika dalam waktu dekat ini saya dapat melakukan perubahan terhadap system Active Record aslinya (agar tidak memerlukan mengunakan fungsi diatas) saya akan post lagi disini.
  • jadi aneh ya bos :D

    malah kita nulis manual sendiri hehe
  • kristkrist
    Posts: 625
    Iya hehe.. Mungkin di CI 2.1.0 yang terbaru ini bisa..
    Saya belum pernah coba soalnya sudah keseringan pake MY_Model sendiri hehe..
  • GokuGoku
    Posts: 17,800
    Lebih baik pakai query biasa sajalah. Where, join, order by dan limit ditulis manual saja. Tambah bingung nanti :D
  • muslihmuslih
    Posts: 1
    kalau ad query kayak gini converting ke query biasanya gimana sih?
    $this->db->like('fullname',$key);
    $this->db->or_like('username',$key);
    if($num)
    {
       return $this->db->count_all_results();
    }
    $this->db->order_by('user.level_id','asc');
    $this->db->limit($perpage,$offset);
    return $this->db->get();
  • galutgalut
    Posts: 3
    Apa enaknya pake CI, kyknya lebih enjoy tulis SQL langsung...

  • .  .
    Posts: 3,254
    ya kalo sudah pake framework CI utk yg lainnya, masa utk DB mesti tulis manual ?
  • @muslih coba gunakan metode
    $this->db->last_query() untuk menampilkan query terakhir,
    Atau hidupkan profiler.
    $this->output->enable_profiler()

    Nanti bakal keliatan semua dah querynya
  • saefullohsaefulloh
    Posts: 902
    aku ngikutin ajalah. rumangsa wong bodo aku melu maca bae. hehe... :-)
  • kristkrist
    Posts: 625
    @muslih
    SELECT *
    FROM TABLE
    WHERE fullname LIKE 's%' OR username LIKE '% s%'

Selamat datang,

It looks like you're new here. If you want to get involved, click one of these buttons!

In this Discussion

Top Posters