提问人:laode fauzan 提问时间:10/29/2023 最后编辑:Vickellaode fauzan 更新时间:10/30/2023 访问量:58
如何将模型中的几个相似函数替换为一个函数?
How to replace several similar functions in a model with just one?
问:
目前,我正在使用这些函数进行查询:
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();
}
答:
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();
}
这感觉有点不对劲,因为无论如何,这些方法可能都属于各自的模型。
从您的问题中无法确定,但似乎这四个表包含相同结构的数据,在这种情况下,、、等可能是包含所有这些数据的单个表中类型标识符中的值。300
336_a
336_b
评论
UNION