ThinkSNS-應(yīng)用開發(fā)范例-開始編程MODEL層
來自站長百科
導航: 上一頁
MODEL層
在Lib/Model/目錄下,新建三個文件GiftCategoryModel.class.php,GiftModel.class.php 和UserGiftModel.class.php,分別創(chuàng)建三個代碼如下:
class GiftCategoryModel extends Model{ }, class GiftModel extends AdvModel{ }, class UserGiftModel extends Model{ }
通過以上步驟,我們現(xiàn)在已將數(shù)據(jù)庫表和模型類建立了聯(lián)接關(guān)系。在項目的Action 類和Model 類中,已可以直接對數(shù)據(jù)庫進行相關(guān)操作。有些人習慣在Model 類里封裝一些方法,這樣更符合MVC 規(guī)范,也有一些人習慣把方法都寫在Action 里,方便程序的閱讀,這主要看個人習慣。本次開發(fā)將基本方法寫進入Model 層里。
- 我們先看看GiftCategoryModel 里的代碼,已經(jīng)附上詳細注釋。
<?php class GiftCategoryModel extends Model { private $gift; //禮品表模型 /** * _initialize * 初始化函數(shù) * @return void */ public function _initialize(){ //初始化只搜索狀態(tài)status 為1 的。 $this->status = 1; parent:: _initialize(); } public function setGift($gift){ $this->gift = $gift; //賦值禮品表模型 } /** * GiftToCategory * 獲取已經(jīng)分組的禮物 * @return unknown_type */ public function GiftToCategory(){ //初始化禮物分組的變量,禮物數(shù)據(jù)的變量和最后結(jié)果的變量 $gift = $gift_category = array(); //獲取禮物分組和禮物數(shù)據(jù) $gift_category = $this->findAll(); $gifts = $this->gift->findAll(); //根據(jù)分組重組數(shù)據(jù) foreach ($gift_category as &$category){ foreach($gifts as $gift){ if($category['id'] == $gift['categoryId']) $category['gifts'][] = $gift; } } //返回結(jié)果 return $gift_category; } } ?>
- 接著看看GiftModel 里的代碼,也已經(jīng)附上詳細注釋。
<?php class GiftModel extends AdvModel{ /** * _initialize * 初始化函數(shù) * @return void */ public function _initialize(){ parent:: _initialize(); } /** * assertNumAreEmpty * 判斷是否禮品數(shù)是否足夠 * @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 里的代碼,也已經(jīng)附上詳細注釋。
<?php class UserGiftModel extends Model{ private $gift; //禮品表模型 private $category; //禮品類型表模型 private $api; //網(wǎng)站API public function setApi($api){ $this->api = $api; //賦值網(wǎng)站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 * 獲得某個人發(fā)送的禮物列表 * @param $uid * @return unknown_type */ public function sendList($uid){ $map['fromUserId'] = $uid; return $this->where($map)->order('id desc')->findPage(15); } /** * sendGift * 發(fā)送禮物 * * @param array $toUid 接收禮品人的ID(可以多個,以,分隔) * @param $fromUid 送禮者ID * @param $sendInfo 附加信息和發(fā)送方式 * @param $giftInfo 禮品信息 */ public function sendGift($toUid,$fromUid,$fromName,$sendInfo,$giftInfo){ //判斷參數(shù)是否合法。不合法返回false if(!is_numeric($fromUid)){ return '非法操作!'; } $toUser = explode(',',$toUid); $userNum = count($toUser); //判斷是否是自己給自己送禮物 if(in_array($fromUid,$toUser)){ return '不能給自己送禮物!'; } //判斷是否有足夠的禮物數(shù) if($this->gift->assertNumAreEmpty($giftInfo['id'],$userNum)){ return '禮物庫存不足,發(fā)送禮品失??!'; } $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); //如果入庫過程成功。則做相應(yīng)的處理 if($res){ //禮物數(shù)減1 $this->gift->setDec('num','id='。$giftInfo['id'],$userNum); return 1; }else{ return '發(fā)送禮品失??!'; } } /** * __insertData * 把數(shù)據(jù)插入數(shù)據(jù)庫 * @param $toUser 發(fā)送對象ID $map 數(shù)據(jù)組 * @return $add 插入結(jié)果集; */ private function __insertData($toUser,$map){ foreach ($toUser as $_touid){ //組成數(shù)據(jù)集 $map['toUserId'] = intval($_touid); //將信息入庫 $res = $this->add($map); } return $res; } } ?>