ThinkSNS-应用开发范例-开始编程MODEL层
来自站长百科
导航: 上一页
MODEL层
在Lib/Model/目录下,新建三个文件GiftCategoryModel.class.php,GiftModel.class.php 和UserGiftModel.class.php,分别创建三个代码如下:
class GiftCategoryModel extends Model{ }, class GiftModel extends AdvModel{ }, class UserGiftModel extends Model{ }
通过以上步骤,我们现在已将数据库表和模型类建立了联接关系。在项目的Action 类和Model 类中,已可以直接对数据库进行相关操作。有些人习惯在Model 类里封装一些方法,这样更符合MVC 规范,也有一些人习惯把方法都写在Action 里,方便程序的阅读,这主要看个人习惯。本次开发将基本方法写进入Model 层里。
- 我们先看看GiftCategoryModel 里的代码,已经附上详细注释。
<?php class GiftCategoryModel extends Model { private $gift; //礼品表模型 /** * _initialize * 初始化函数 * @return void */ public function _initialize(){ //初始化只搜索状态status 为1 的。 $this->status = 1; parent:: _initialize(); } public function setGift($gift){ $this->gift = $gift; //赋值礼品表模型 } /** * GiftToCategory * 获取已经分组的礼物 * @return unknown_type */ public function GiftToCategory(){ //初始化礼物分组的变量,礼物数据的变量和最后结果的变量 $gift = $gift_category = array(); //获取礼物分组和礼物数据 $gift_category = $this->findAll(); $gifts = $this->gift->findAll(); //根据分组重组数据 foreach ($gift_category as &$category){ foreach($gifts as $gift){ if($category['id'] == $gift['categoryId']) $category['gifts'][] = $gift; } } //返回结果 return $gift_category; } } ?>
- 接着看看GiftModel 里的代码,也已经附上详细注释。
<?php class GiftModel extends AdvModel{ /** * _initialize * 初始化函数 * @return void */ public function _initialize(){ parent:: _initialize(); } /** * assertNumAreEmpty * 判断是否礼品数是否足够 * @return bool */ public function assertNumAreEmpty($id,$count = null){ $num = (int)$this->where('id='。$id)->getField('num'); if($num == 0 || $num < $count){ return true; } return false; } } ?>
- 最后看看UserGiftModel 里的代码,也已经附上详细注释。
<?php class UserGiftModel extends Model{ private $gift; //礼品表模型 private $category; //礼品类型表模型 private $api; //网站API public function setApi($api){ $this->api = $api; //赋值网站API } public function setGift($gift){ $this->gift = $gift; //赋值礼品表模型 } public function setCategory($category){ $this->category = $category; //赋值礼品类型表模型 } /** * receiveGift * 获得某个人收取的礼物 * @param $uid * @return Gift; */ public function receiveList($uid){ $map['toUserId'] = $uid; return $this->where($map)->order('id desc')->findPage(15); } /** * sendGift * 获得某个人发送的礼物列表 * @param $uid * @return unknown_type */ public function sendList($uid){ $map['fromUserId'] = $uid; return $this->where($map)->order('id desc')->findPage(15); } /** * sendGift * 发送礼物 * * @param array $toUid 接收礼品人的ID(可以多个,以,分隔) * @param $fromUid 送礼者ID * @param $sendInfo 附加信息和发送方式 * @param $giftInfo 礼品信息 */ public function sendGift($toUid,$fromUid,$fromName,$sendInfo,$giftInfo){ //判断参数是否合法。不合法返回false if(!is_numeric($fromUid)){ return '非法操作!'; } $toUser = explode(',',$toUid); $userNum = count($toUser); //判断是否是自己给自己送礼物 if(in_array($fromUid,$toUser)){ return '不能给自己送礼物!'; } //判断是否有足够的礼物数 if($this->gift->assertNumAreEmpty($giftInfo['id'],$userNum)){ return '礼物库存不足,发送礼品失败!'; } $map['giftPrice'] = $giftPrice; $map['giftImg'] = t($giftInfo['img']); $map['sendInfo'] = t($sendInfo['sendInfo']); $map['sendWay'] = intval($sendInfo['sendWay']); $map['fromUserId'] = intval($fromUid); $map['fromUserName'] = t($fromName); $map['cTime'] = time(); $res = $this->__insertData($toUser,$map); //如果入库过程成功。则做相应的处理 if($res){ //礼物数减1 $this->gift->setDec('num','id='。$giftInfo['id'],$userNum); return 1; }else{ return '发送礼品失败!'; } } /** * __insertData * 把数据插入数据库 * @param $toUser 发送对象ID $map 数据组 * @return $add 插入结果集; */ private function __insertData($toUser,$map){ foreach ($toUser as $_touid){ //组成数据集 $map['toUserId'] = intval($_touid); //将信息入库 $res = $this->add($map); } return $res; } } ?>