/** * Bonus 是否可用 * * @return string 枚举类型 BONUS_XXXX,见常量定义 * * @param string $sn SN号码 */ public function isBonusAvailable($sn) { // 参数验证 $validator = new Validator(array('sn' => $sn)); $sn = $validator->required()->digits()->validate('sn'); $this->validate($validator); // 需要联表查询 $dataMapper = new DataMapper(null); $result = $dataMapper->selectComplex(array('user_bonus' => 'ub', 'bonus_type' => 'bt'), '*', array('ub.bonus_type_id = bt.type_id and ub.bonus_sn= ?', $sn), array('order' => 'bonus_id', 'offset' => 0, 'limit' => 1)); if (empty($result) || empty($result[0])) { return Bonus::BONUS_NOT_EXIST; } $result = $result[0]; if (!empty($result['user_id'])) { return Bonus::BONUS_OCCUPIED; } if ($result['use_end_date'] <= Time::gmTime()) { return Bonus::BONUS_EXPIRED; } return Bonus::BONUS_AVAILABLE; }
/** * 取得一组结果的列表 * * @return array 结果列表 * * @param mixed $table 需要查询的数据表,可以是单个表,例如:'user', * 也可以是多个表的数组,例如:array('user' ,'order_info' => 'oi') * @param string $fields 需要 select 的字段 * @param array $condArray 查询条件数组,例如: * array( * array('supplier_id = ?', $supplier_id) * array('is_on_sale = ?', 1) * array('supplier_price > ? or supplier_price < ?', $priceMin, $priceMax) * ) * * @param array $optionArray 目前不支持 Having 查询,留待以后扩展 * * @param int $offset 用于分页的开始 >= 0 * @param int $limit 每页多少条 * @param int $ttl 缓存多少时间 * */ public function _fetchArray($table, $fields = '*', array $condArray = null, array $optionArray = null, $offset = 0, $limit = 10, $ttl = 0) { // 构造参数验证数组 $validatorArray = array(); $validatorArray['table'] = $table; $validatorArray['fields'] = $fields; $validatorArray['offset'] = $offset; $validatorArray['limit'] = $limit; $validatorArray['ttl'] = $ttl; if (null != $condArray) { $validatorArray['condArray'] = $condArray; } if (null != $optionArray) { $validatorArray['optionArray'] = $optionArray; } // 参数验证 $validator = new Validator($validatorArray, ''); $table = $validator->required()->validate('table'); $fields = $validator->required()->validate('fields'); $offset = $validator->digits()->min(0)->validate('offset'); $limit = $validator->digits()->min(0)->validate('limit'); $ttl = $validator->digits()->min(0)->validate('ttl'); if (null != $condArray) { $condArray = $validator->requireArray(false)->validate('condArray'); } if (null != $optionArray) { $optionArray = $validator->requireArray(false)->validate('optionArray'); } $this->validate($validator); // 构造查询条件 $filter = null; if (!empty($condArray)) { $filter = QueryBuilder::buildAndFilter($condArray); } if (null == $optionArray) { $optionArray = array(); } $optionArray['offset'] = $offset; if ($limit > 0) { $optionArray['limit'] = $limit; } // 创建 DataMapper $dataMapper = new DataMapper($table); if (is_string($table)) { //简单的单表查询 $table = array($table); } if (is_array($table)) { // 复杂的多表查询 return $dataMapper->selectComplex($table, $fields, $filter, $optionArray, $ttl); } throw new \InvalidArgumentException('table should be string or array'); }