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;
}
}
?>


参考资料[ ]