|
目的:
1、不重复编写基础的增删改查。
2、对仅需要基本增删改查的数据表,不创建文件,而是动态实例化。
基于几点考虑:
1、有很多数据表,需要很多数据模型的文件
2、需要重复编写CURD
3、有些数据表仅仅需要几本的CURD
大概的思路:
1、用MY_model 继承 CI_model
2、在MY_model 中编写常用的 curd 操作,并将“表名”作为类变量
3、用一个函数动态实例化数据模型的对象
PHP复制代码
/**
* 动态生成CI的数据模型
* 由于所有数据模型都会有基本的 insert/update/delete/get/gets操作,因此我们将他们动态生成
* 对一个数据表的操作需求仅有 添加、更新、删除、获取单条、获取所有记录的SQL操作,才能使用本函数
*
* 必须有 my_model 继承 ci_model 且常用方法写在my_model中
* @param string() $name 传入数据表名,返回该数据表的数据模型(如果表名不存在会报错)
* @return object() $obj 返回该对象的实例
*/
function factModel ($name){
$nameModel = $name.'_model';
$ci = &get_instance ();
if( !isset($ci->$nameModel) ){
$ci->$nameModel = new MY_model ();
$ci->$nameModel->TABLE = $name;
}
return $ci->$nameModel;
}
复制代码
MY_MODEL.php 的代码,这里的数据库操作,是和我之前发的 支持读写分离的数据库类一起用的,自己可改成其他的用法
PHP复制代码 <?php/**
* 提供表常用的insert、update、delete、get、gets 等几个方法,省的每个函数都要写,很烦人
* 继承本类的模型,必须 public $TABLE = 表名, 否则 以上操作因为找不到表名而报错
* 如果需要操作字表,建议:
* function table_insert(){
* $id = $this->insert(主表插入)
* //编写字表插入的代码,更新和删除相同
* }
* @author Administrator
*/
class MY_model extends CI_Model {
//put your code here
public $TABLE = FALSE;
function __construct () {
parent ::__construct ();
}
//快速获取当前用户的uid
function uid (){
return $this->uid;
}
function insert ($data){
$sql = "INSERT INTO {$this->TABLE} {$this->db->st($data,'insert')}";
$id = $this->db->runsql($sql);
return $id;
}
function get ($where){
$rows = $this->gets( $where, '', 'limit 0,1');
if( is_array($rows) && isset($rows[0]) ){
return $rows[0];
}
return NULL;
}
function gets ($where, $order='', $limit=''){
//如果传入的是数组,则使用and转换,否则请传入SQL片段
$where = $this->db->st($where,'where');
//如果没传入where的话,干脆就不用加条件了
if( !empty($where) ){
$where = 'WHERE '.$where;
}
$sql = "SELECT * FROM {$this->TABLE} $where $order $limit";
return $this->db->getData($sql);
}
function update ($data, $where){
$sql = "UPDATE {$this->TABLE} SET {$this->db->st($data,'update')} WHERE {$this->db->st($where,'where')}";
return $this->db->runsql($sql);
}
function delete ($where){
$sql = "DELETE FROM {$this->TABLE} WHERE {$this->db->st($where,'where')}";
return $this->db->runsql($sql);
}
}
?>
复制代码
|
|