2013-05-13 98 views
0

我正在使用函數來設置整個sql查詢。 這個函數被其他兩個用來獲取sql,然後根據需要使用它。清除CodeIgniter中的SELECT字段

現在,我想要另一個函數來執行相同的查詢,但我不需要以前的函數需要的所有字段。所以,我想知道是否有方法在設置後替換查詢的SELECT部分​​。

僞代碼:

function sql(){ 
    $this->db->select('*'); 
    $this->db->from('table'); 
} 
function defaultSql(){ 
    $this->sql(); 
    $this->get(); 
} 
function notAllFields(){ 
    $this->sql(); 
    // This is the solution I'm looking for. It should clear the select 
    $this->db->clearSelect(); 
    // I define a different select 
    $this->db->select('field'); 
    $this->get(); 
} 

提前感謝!

+0

請注意,我正在尋找一種解決方案,實際上可以清除已設置的選擇。我的源代碼比示例複雜得多,所以我不想將任何參數傳遞給sql函數。 ;) – j4nSolo 2013-05-13 08:40:34

回答

0

你可以試試這種方式?

function sql($fields = '*') { 
    $this->db->select($fields); 
    $this->db->from('table'); 
    } 

    function defaultSql() { 
    $this->sql(); 
    // ...... 
    } 

    function notAllFields() { 
    $this->sql('field'); 
    // ..... 
    } 
+0

是的,這可能是一種獲得相同結果的方式,但它不會清除選擇部分。 – j4nSolo 2013-05-13 08:36:41

0

這裏做這樣的

假設你

function sql($status = false) 
{ 
    if($status == true){ 
    $this->db->select('field'); 
    }else{ 
    $this->db->select('*'); 
    } 
} 

function get() 
{ 
    $this->db->from('table'); 
} 

function defaultSql(){ 
    $this->sql(); 
    $this->get(); 
} 

function notAllFields(){ 
    $this->sql(true); 
    $this->get(); 
} 
+0

與DBK相同。這是通過清除選擇部分獲得相同結果的一種方式,但這不是我所期待的。 – j4nSolo 2013-05-13 08:38:30

+0

@ j4nSolo爲什麼你選擇後甚至試圖清除選擇的部分。你爲什麼要這樣做,當你可以處理有條件的事情 – 2013-05-13 08:41:16

0

可以重置DB-選擇通過

1- <?php $this->db->clear_select(); ?> 
編寫所有這些功能在模型的一個簡單方法

它將重置所有的查詢變量(select,where,join..from..etc)。在應用程序/庫

2 - 通過創建MY_DB_mysqli_driver.php它應該包含以下

<?php defined('BASEPATH') OR exit('No direct script access allowed'); 

class MY_DB_mysqli_driver extends CI_DB_mysqli_driver 
{ 
    public function __construct($param) 
    { 
     parent::__construct($param); 
    } 
    public function clear_select() 
    { 
     $this->qb_select = array(); 
    } 
} 

然後擴展數據庫驅動程序就可以使用$這個 - > DB-> select_clear()功能僅清除選擇部分。