codeigniter 如何用一个函数替换一个模型中的多个相似函数?

atmip9wb  于 7个月前  发布在  其他
关注(0)|答案(2)|浏览(61)

目前我正在使用这些函数进行查询:

public function Surat_300() {
    $query = $this->db->query(" SELECT * FROM `ts_300` WHERE `status_surat` = '1' ");
    return $query->num_rows();
}

public function Surat_336_a() {
    $query = $this->db->query(" SELECT * FROM `ts_336_a` WHERE `status_surat` = '1' ");
    return $query->num_rows();
}

public function Surat_336_b() {
    $query = $this->db->query(" SELECT * FROM `ts_336_b` WHERE `status_surat` = '1' ");
    return $query->num_rows();
}

public function Surat_336_c() {
    $query = $this->db->query(" SELECT * FROM `ts_336_c` WHERE `status_surat` = '1' ");
    return $query->num_rows();
}

字符串

lzfw57am

lzfw57am1#

对于这种情况,你可以在查询字符串中使用一个变量(例如:$table)来表示你想要从中获取数据的表:
该变量可以在控制器中作为$_POST变量从输入字段接收,或者作为$_SESSION变量、URL等经由API调用接收。

public function Surat($table) { 
  $query = $this->db->query(" SELECT * FROM $table WHERE status_surat = '1' "); 
  return $query->num_rows(); 
}

字符串
由于这被标记为Codeigniter,我建议使用以下语法来利用框架来生成更安全的查询:

public function Surat($table) { 
  $query = $this->db->query->where('status_surat', 1) 
                           ->get($table); 
  return $query->num_rows();    
}
// change 1 to '1' if status_surat represents a string, not a boolean/numeric.


从一个控制器中,你可以这样调用模型函数:

$myrows=$this->My_model->Surat('ts-300');

v2g6jxz6

v2g6jxz62#

您现有的四个方法从每个表中检索所有记录,只是为了返回行计数。使用SELECT COUNT(*) FROMts_300WHEREstatus_surat= 1会更有效。
你可以传入表名,就像Vickel建议的那样:

public function SuratCount($table) {
    return $this->db->from($table)
            ->where('status_surat', 1)
            ->count_all_results();
}

字符串
这感觉有点不对,因为这些方法 * 可能 * 属于它们各自的模型。
从你的问题中无法确定,但这四个表似乎包含相同结构的数据,在这种情况下,300336_a336_b等可能是包含所有这些数据的单个表中的类型标识符中的值。

相关问题