ThinkPHP框架之模型定义

一、前言

这两天因为工作需要就学了个ThinkPHP框架,感觉还挺好,之前一直是用Java来开发网站,一下子使用另外一门语言刚开始也是有点不习惯,但是每种语言都是可以触类旁通的,所以学起来就没有那么吃力,然后想通过写写博客来巩固一下这几天的学习成果。我是按照ThinkPHP的开发手册来学习这个框架的,所以接下来我也是会按照开发手册加上一些代码来介绍Think PHP框架的一些实现。

二、模型

什么是模型?

在ThinkPHP中基础的模型类就是Think\Model类,该类完成了基本的CURD、ActiveRecord模式、连贯操作和统计查询,一些高级特性被封装到另外的模型扩展中。基础模型类的设计非常灵活,甚至可以无需进行任何模型定义,就可以进行相关数据表的ORM和CURD操作,只有在需要封装单独的业务逻辑的时候,模型类才是必须被定义的。

模型定义

【1】模型类通常需要继承系统的\Think\Model类或其子类,下面是一个Home\Model\UserModel类的定义:

namespace Home\Model;
use Think\Model;
class UserModel extends Model {
	//可以什么都不写
}

注意:模型类的作用大多数情况是操作数据表的,如果按照系统的规范来命名模型类的话,大多数情况下是可以自动对应数据表。

【2】模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,然后加上模型层的名称(默认定义是Model),例如:

namespace Home\Model;
use Think\Model;
class UserModel extends Model {
	//UserModel 约定对应数据表think_user。(假设数据库的前缀定义是 think_)
}
//===========================================================================
namespace Home\Model;
use Think\Model;
class UserTypeModel extends Model {
	//UserTypeModel 约定对应数据表think_user_type。(假设数据库的前缀定义是 think_)
}

【3】在ThinkPHP的模型里面,有几个关于数据表名称的属性定义:

属性说明
tablePrefix定义模型对应数据表的前缀,如果未定义则获取配置文件中的DB_PREFIX参数
tableName不包含表前缀的数据表名称,一般情况下默认和模型名称相同,只有当你的表名和当前的模型类的名称不同的时候才需要定义。
trueTableName包含前缀的数据表名称,也就是数据库中的实际表名,该名称无需设置,只有当上面的规则都不适用的情况或者特殊情况下才需要设置。

下面是例子:

<?php
namespace Home\Model;
use Think\Model;
/**
* @author czd <[email address]>
*/
class UserModel extends Model
{
	//如果表名称是Users,则可以根据这个tableName设置对应表与模型的映射
	protected $tableName = 'user'; 
	/**
	 * 如果表的前缀是top_,则可以根据tablePrefix设置对应表与模型的映射;
	 * 如果数据表直接就是user,而没有前缀,则可以设置tablePrefix为空字符串。
	 */
	protected $tablePrefix = 'think_'; 
	/**
	 *而对于另外一种特殊情况,我们需要操作的数据表是top_categories,这个时候我们就需要定义 trueTableName 属性
	 * 注意trueTableName需要完整的表名定义。
	 */
	protected $trueTableName = 'think_user'; 
	// 
	/**
	 * 如果不希望依赖字段缓存或者想提高性能,也可以在模型类里面手动定义数据表字段的名称,可以避免IO加载的效率开销,
	 * 除了可以设置数据表的字段之外,我们还可以定义字段的类型,用于某些验证环节
	 * @var array
	 */
	 protected $fields = array('id', 'name', 'age', 'sex','_pk'=>'id',        
	 	'_type'=>array('id'=>'int','name'=>'varchar','age'=>'int','sex'=>'char') 
	 );

	 /**
	  * 字段映射:字段映射功能可以让你在表单中隐藏真正的数据表字段,而不用担心放弃自动创建表单对象的功能
	  */
	 protected $_map = array(
			'ids' =>'id', 
			'userName' => 'name', // 把表单中userName映射到数据表的name字段
			'userAge' => 'age',	  // 把表单中userAge映射到数据表的age字段
			'userSex' => 'sex'    // 把表单中userSex映射到数据表的sex字段

		);
}

三、总结

多敲,多看,多实战,就好了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值