2013-05-13 101 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()功能仅清除选择部分。