为子模型将从中继承的父模型编写通用插入函数是否常见和/或明智?我正在使用CodeIgniter''PHP开发一个非常简单的CRUD应用程序,但这个问题实际上是独立于语言''框架的。继承一个读取(选择)一个值的读取函数效果很好,感觉正确: 父模型
public function read($columnSelect,$columnCondition,$value) {
$query = "SELECT $columnSelect FROM $tableName WHERE $columConditionn=?";
$res = $this->db->query($query,$columnName);
if ($res->result()->num_rows()>0)
return $res->result();
else
return false;
这可以让您检索用户ID,电子邮件,检查某些列的存在等,我认为这绝对是在我的大多数或所有模型中有用的东西,因此最好在父模型中编写该函数。所有更复杂的读取函数显然都特定于每个模型(例如,读取多个值的查询等)现在插入呢?除了编写函数以插入一个值、两个值等或编写一个"丑陋"函数以获取参数数组并根据数组构建插入查询之外,我想不出任何通用插入,例如:
public function genericInsert($columnList,$valueList) {
$query = " INSERT INTO $tableName(
//now code that parses columnList and adds ','
//and then code that adds VALUES(..) in the same manner
这对我来说绝对不像是一种"模式",感觉不对。我忽略了什么吗?你们为插入做什么,是特定于每个模型还是尝试找出从父模型继承的方法?而且,如果您愿意,您会发现自己在父模型中放置了哪些函数?(更新,删除等)?
到目前为止,这是我的父模型的样子:
class MY_Model extends CI_Model {
public $tableName;
public function __construct($tableName) {
parent::__construct();
$this->tableName = $tableName;
}
public function read($columnSelect,$columnCondition,$value) {
$query = "SELECT $columnSelect FROM $tableName WHERE $columConditionn=?";
$res = $this->db->query($query,$columnName);
if ($res->result()->num_rows()>0)
return $res->result();
else
return false;
}
}
为什么要重新发明轮子?Codeigniter 的标准数据库类已经可以执行要创建的父模型将执行的所有操作。如果您正在编写自己的数据库包装器类并且不使用 CI,这是有意义的,但 CI 已经提供了这些功能,并且可以根据需要进行自定义/扩展。
讨厌回答我自己的问题,但这就是我正在寻找的http://thephpcode.com/blog/codeigniter/a-smart-codeigniter-model
只是一些建议,在创建这样的查询时要非常小心。我没有看到您的代码中发生任何转义,让您的代码开放以进行 SQL 注入。
例如,如果$columnSelect成为;
"x'; DROP TABLE members; --"
您的查询变为:
"SELECT 'x'; DROP TABLE members; -- FROM $tableName WHERE $columConditionn=?";