【问题标题】:Clear SELECT fields in CodeIgniter清除 CodeIgniter 中的 SELECT 字段
【发布时间】:2013-05-07 04:33:35
【问题描述】:

我正在使用一个函数来设置整个 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();
}

提前致谢!

【问题讨论】:

  • 请注意,我正在寻找一个实际上清除已设置的选择的解决方案。我的源代码比示例复杂得多,所以我不想将任何参数传递给 sql 函数。 ;)

标签: php mysql codeigniter select


【解决方案1】:

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

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

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

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

【讨论】:

  • 是的,这可能是实现相同结果的一种方法,但它不会清除选择部分。
【解决方案2】:

这是一个简单的方法

假设您在模型中编写所有这些函数

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

【讨论】:

  • 与 DBK 相同。这是一种与清除选择部分获得相同结果的方法,但这不是我想要的。
  • @j4nSolo 为什么在选择后还要清除选择部分。当你可以处理有条件的事情时,你为什么要这样做
【解决方案3】:

您可以通过

重置数据库选择
1- <?php $this->db->clear_select(); ?>

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

2- 在 application/library 中通过创建 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() 函数只清除选择部分。

【讨论】:

    猜你喜欢
    • 2015-05-10
    • 1970-01-01
    • 2019-11-22
    • 2014-05-29
    • 2011-03-13
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    相关资源
    最近更新 更多