模型的介绍
Model: 模型基础类,该类完成了基本的 CURD、ActiveRecord 模式、连贯操作和统计查询等
CURD:Create,Update,Read,Delete
AdvModel: 高级模型类,完成一些如 文本字段、只读字段、序列化字段、乐观锁、多数据库连接 等模型的高级特性
ViewModel: 视图模型类,完成了模型的视图操作
RelationModel: 关联模型类,完成了模型的关联操作
模型的命名规范
正常命名
**
表名(不含前缀) | 模型名称(类名) | 文件名 | 例子 |
---|---|---|---|
user | UserModel | UserModel.class.php | class UserModel extends Model{} |
user_group | UserGroupModel | UserGroupModel.class.php | class UserGroupModel extends Model{} |
特殊情况—$tableName (没有后缀的表的名称)
当表前缀和系统设置的前缀(DB_PREFIX)一致而表名和模型名称不一致时,可设置此属性$tableName
class UserModel extends Model{
protected $tableName = ‘users’;
}
特殊情况—$trueTableName (完整的表名称)
如果表的前缀跟系统设定的不一致(表名和模型名可能一致)时,需要设定模型的 trueTableName 属性
class UserModel extends Model{
protected $trueTableName= ‘users’;
}
表后缀
表名(不含前缀) | 后缀 | 模型名称(类名) | 文件名 |
---|---|---|---|
log001 | 001 | LogModel | LogModel.class.php |
基础Model类**
插入基础数据
public function insert(){
header(“Content-Type:text/html; charset=utf-8”);
$Dao = M(“User”); // 实例化模型类
// 或者是 new Model,这里的M是快捷方法
// 构建写入的数据数组(自主构建)<br /> $data["username"] = "小王"; <br /> $data["password"] = md5("123456"); <br /> $data["email"] = "12345@163.com"; <br /> $data["regdate"] = time();
// 构建写入的数据数组[通过form表单]<br /> $data["username"] = $_POST["username"]; <br /> $data["password"] = md5($_POST["password"];); <br /> $data["email"] = $_POST["email"]; <br /> $data["regdate"] = time();
// 写入数据 <br /> if($lastInsId = $Dao->add($data)){ <br /> echo "插入数据 id 为:$lastInsId"; <br /> } else { <br /> $this->error('数据写入错误!'); <br /> } <br /> <br /> /***********************************************/<br /> // 使用对象方式插入数据<br /> // 数据对象赋值 <br /> $Dao->username = "小王"; <br /> $Dao->password = md5("123456"); <br /> $Dao->email = "12345@163.com"; <br /> $Dao->regdate = time();
// 写入数据 <br /> if($lastInsId = $Dao->add()){ <br /> echo "插入数据 id 为:$lastInsId"; <br /> } else { <br /> $this->error('数据写入错误!'); <br /> } <br /> /**********************************************/
// 使用create()创建数据对象自动搜集表单数据 <br /> // 或者使用 - 接受 GET 数据:create($_GET) <br /> if($Dao->create()){<br /> $Dao->password = md5($_POST["password"]); <br /> $Dao->regdate = time(); <br /> if($lastInsId = $Dao->add()){ <br /> echo "插入数据 id 为:$lastInsId"; <br /> } else { <br /> echo "数据写入错误!"; <br /> } <br /> }else{ <br /> exit($Dao->getError().' [ [返 回]() ]'); <br /> } <br />}
用户自定义模型,自动验证设置
该模型放置在 Lib/Model文件夹下,并且自动加载
class UserModel extends Model{
// 一些业务逻辑……
// 自动验证设置
protected $_validate = array(
array(‘username’,’require’,’用户名必须填写!’,1),
array(‘email’,’email’,’邮箱格式错误!’,2),
array(‘username’,’’,’用户名已经存在!’,0,’unique’,1),
);
//自动填充设置
protected $_auto = array(
array(‘regdate’,’time’,self::MODEL_INSERT,’function’),
array(‘password’,’md5’,self::MODEL_INSERT,’function’),
);
}
// 调用某Action下的insert方法
public function insert(){
header(“Content-Type:text/html; charset=utf-8”);
//实例化自定义的一个UserModel
$Dao = D(“User”);
// 使用create()方法读取表单数据并进行数据自动校验和填充
if($Dao->create()){
if($lastInsId = $Dao->add()){
echo “插入数据 id 为:$lastInsId”;
} else {
echo “数据写入错误!”;
}
}else{
exit($Dao->getError().’ [ 返 回 ]’);
}
}
实例化模型类
1.实例化基础模型来操作表 user
$User = new Model(‘User’);
$User = M(‘User’);
2.实例化其他模型类来扩展一些通用的逻辑
$User = new CommonModel(‘User’);
$User = M(‘User’, ‘CommonModel’);
对于以上的M方法
如果对数据表进行简单的CURL操作而无复杂的而没有复杂的业务逻辑时
如果只有个别的表有较为复杂的业务逻辑时候可以将M方法和实例化CommonModel类进行结合使用.
3.实例化用户定义的模型类
$User = new UserModel();
$User = D(‘User’);
//D方法的跨项目调用
$User = D(‘User’, ‘Admin’); // 实例化 Admin 项目下面的 User 模型
$User = D(‘Admin.User’); // 启用了项目分组
对于以上的D方法
使用数据的自动校验功能,关联模型
业务逻辑比较复杂,且涉及的表众多
跨项目调用
4.实例化空模型类,可以使用原生sql来操作数据库
$Model = new Model();
$Model = M();