如何将模型中的几个相似函数替换为一个函数?

How to replace several similar functions in a model with just one?

提问人:laode fauzan 提问时间:10/29/2023 最后编辑:Vickellaode fauzan 更新时间:10/30/2023 访问量:58

问:

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

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();
}
php mysql codeigniter codeigniter-3

评论

1赞 FanoFN 10/30/2023
这些是动态表吗?如果没有,使用怎么样?UNION

答:

0赞 Vickel 10/30/2023 #1

对于此类方案,您将在查询字符串中使用变量(例如:)来表示要从中获取数据的表:$table

此变量可以在控制器中作为 $_POST 变量从输入字段接收,也可以通过 AJAX 调用接收,作为 $_SESSION 变量、URL 等。

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');
0赞 user1191247 10/30/2023 #2

您的四个现有方法正在从每个表中检索所有记录,只是为了返回行计数。改用它会更有效率。SELECT COUNT(*) FROM `ts_300` WHERE `status_surat` = 1

您可以传入表名,正如 Vickel 所建议的那样:

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

这感觉有点不对劲,因为无论如何,这些方法可能都属于各自的模型。

从您的问题中无法确定,但似乎这四个表包含相同结构的数据,在这种情况下,、、等可能是包含所有这些数据的单个表中类型标识符中的值。300336_a336_b