初次接触thinkphp模型可能不知道模型到底能用来干啥,下面就从几个问题介绍thinkphp模型
1、thinkphp模型用来干啥?
thinkphp在控制器和数据库之间建立了一个中间模块,那就是模型。
一方面、用来保证插入数据库中数据的合法性,这部分功能由自动验证和自动完成实现。
另一方面、用来规范开发人员编写sql语句的格式,以及提高访问数据库的效率。该功能主要是通过在模型中定义规范数据,以及编写常用和逻辑复杂的sql语句(一次编写多次使用,不用写大量重复的sql语句)实现。
示例:
自动验证和自动完成
protected $_auto = array(
array('status','1',1),
array('password','md5',self::MODEL_BOTH,'function'),
);
//后期添加
protected $_validate = array(
array('user_id','require','必须填写',0),
array('user_id','/\d{6,18}/','用户ID非法',0),
//array('name','require','必须填写'),
array('name','/^[a-zA-Z]([a-zA-Z_0-9]{1,}){5,12}/','用户名称不合法',0),
// array('email','email','非法'),
// array('mobile','/^1(3|4|5|8)\d{9}$/','非法手机号'),
);
常用sql语句:
public function selectUser($username ='',$pas ='')
{
$aData = array(
"username" => $username,
"password" => $pas,
);
// $aField = $this->fields;
// $aField[] = 'u.group_name';
$aField = array('user_id','name','real_name','email','status','idcard','telephone','mobile','g.group_id','group_name','photo','video_authority');
$list = $this->table('user as u,user_group as g') ->where('u.user_group = g.group_id') ->where($aData) ->field($aField) ->select();
return $list;
//$this->where($where)->field('user_id,name,real_name,email,status,idcard,group_id,')->select();
}
2、既然数据的验证可以通过其他方式实现,为什么还要模型?
其一、虽然可以通过其他方式实现数据的验证,但是其他方式都不免会有缺陷,譬如,每次更改都需要找相应的js或php验证函数,而且所处的位置也不尽相同,不便于统一管理。而模型就提供了很大的便利,一劳永逸。
其二、模型的自动验证提供了非常强大的功能,再不断的深入学习中会发现其优点。
3、模型是必要的吗?
对于一易维护的系统来说,模型是很必要的。
模型中集成了数据库的curd操作,相信这些函数绝对好多大部分人自己编写的函数,而且支持链式操作,增加了安全性。
最后附上我自己编写的一个简单模型,可做参考。其中有几点需要强调,
1、在使用自动完成时add(),save()等函数不能传入$data=array(….),因为在create时已经传入了参数,如果再次传入自动完成会失效。
2、使用自动完成时最好将create的第二个参数也写上,因为系统自动检测只有在更新或插入的数据没有主键的情况是正确的,否则会出错。
系统默认有主键时为更新,没有主键为插入
$type = $type?:(!empty($data[$this->getPk()])?self::MODEL_UPDATE:self::MODEL_INSERT);
<?php namespace Home\Model; use Think\Model; class UserModel extends Model { protected $fields = array( 'user_id','name','real_name','password','email','status','idcard','telephone','mobile','group_id','photo','video_authority', '_type' => array( 'user_id' => 'char', 'name' => 'char', 'real_name' => 'char', 'password' => 'char', 'email' => 'varchar', 'status' => 'tinyint', 'idcard' => 'char', 'telephone' => 'char', 'mobile' => 'char', 'group_id' => 'int', 'photo' => 'char', 'video_authority' => 'int', ), ); protected $pk = 'user_id'; //命名规范 protected $_scope = array( 'normal'=>array( 'where' => array('status'=>1), 'order' => 'user_id ASC', ), 'black'=>array( 'where' => array('status'=>0), 'order' => 'user_id ASC', ), ); protected $_auto = array( array('status','1',1), array('password','md5',self::MODEL_BOTH,'function'), ); //后期添加 protected $_validate = array( array('user_id','require','必须填写',0), array('user_id','/\d{6,18}/','用户ID非法',0), //array('name','require','必须填写'), array('name','/^[a-zA-Z]([a-zA-Z_0-9]{1,}){5,12}/','用户名称不合法',0), // array('email','email','非法'), // array('mobile','/^1(3|4|5|8)\d{9}$/','非法手机号'), ); //查询全部用户 public function selectUsers() { return $this->where('normal')->select(); } //查询某一用户 public function selectUser($username ='',$pas ='') { $aData = array( "username" => $username, "password" => $pas, ); // $aField = $this->fields; // $aField[] = 'u.group_name'; $aField = array('user_id','name','real_name','email','status','idcard','telephone','mobile','g.group_id','group_name','photo','video_authority'); $list = $this->table('user as u,user_group as g') ->where('u.user_group = g.group_id') ->where($aData) ->field($aField) ->select(); return $list; //$this->where($where)->field('user_id,name,real_name,email,status,idcard,group_id,')->select(); } //要添加的用户数据数组 //注意在使用自动完成时add()不能有参数传入,也不能有data($data) public function insertUser() { return $this->field($this->fields)->add(); } public function updateUser($id) { $where = array('user_id' => $id); return $this->field($this->fields) ->where($where) ->save(); } } ?>