0

我正在使用一个函数来设置整个 sql 查询。其他两个使用这个函数来获取sql,然后根据需要使用它。

现在,我想要另一个函数来执行相同的查询,但我不需要以前的函数需要的所有字段。所以,我想知道是否有办法在设置后替换查询的 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();
}

提前致谢!

4

3 回答 3

0

你可以试试这个方法吗??

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

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

  function notAllFields() {
    $this->sql('field');
    // .....
  }
于 2013-05-13T07:48:04.107 回答
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();
}
于 2013-05-13T07:59:55.483 回答
0

您可以通过以下方式重置 db-select

1- <?php $this->db->clear_select(); ?>

这将重置所有查询变量(select、where、join..from..等)。

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();
    }
}

然后您可以使用$this->db->select_clear()函数仅清除选择部分。

于 2017-10-18T23:40:46.513 回答