/** * 重设 auto_increment 的值,自动计算最大的值 * * @string string $primaryKey 主键名称 * */ public function resetAutoIncValue(DataMapper $dataMapper, $primaryKey) { list($result) = $dataMapper->select('max(' . $primaryKey . ') as mvalue', null, null, 0); $autoIncValue = $result->getAdhocValue('mvalue') + 1; $this->setAutoIncValue($dataMapper, $autoIncValue); }
/** * 取得分类下面对应的商品描述列表 * 由于这是为分类列表用的,所以我们尽量取少的数据,不是整个商品详情都取 * 少 select 一些字段有利于提高性能 * * @return array 商品列表,格式 array(array(商品详情), array(商品详情) ...) * * @param int $categoryId 分类的ID * @param int $level 取得多少层,子分类有可能很深,我们只取有限层次 * @param int $offset 从什么地方开始取商品 * @param string $systemTag 系统标记 * @param int $limit 限制一次取得多少个商品 * @param int $ttl 缓存时间 */ public function fetchGoodsArray($categoryId, $level, $systemTag, $offset = 0, $limit = 10, $ttl = 0) { // 参数验证 $validator = new Validator(array('categoryId' => $categoryId, 'level' => $level, 'systemTag' => $systemTag, 'offset' => $offset, 'limit' => $limit, 'ttl' => $ttl)); $categoryId = $validator->digits()->min(0)->validate('categoryId'); $level = $validator->required()->digits()->min(1)->validate('level'); $systemTag = $validator->validate('systemTag'); $offset = $validator->digits()->min(0)->validate('offset'); $limit = $validator->digits()->min(1)->validate('limit'); $ttl = $validator->digits()->min(0)->validate('ttl'); $this->validate($validator); $childrenIdArray = $this->fetchCategoryChildrenIdArray($categoryId, $level, $ttl); $childrenIdArray[] = $categoryId; // 加入父节点 $queryCondArray = array(); $queryCondArray[] = array('is_delete = 0 AND is_on_sale = 1 AND is_alone_sale = 1'); // 构建 SQL 的 in 语句, cat_id in (100,20,30) $queryCondArray[] = array(QueryBuilder::buildInCondition('cat_id', $childrenIdArray, \PDO::PARAM_INT)); if (!empty($systemTag)) { $queryCondArray[] = array('system_tag_list like ? ', '%' . Utils::makeTagString(array($systemTag)) . '%'); } $dataMapper = new DataMapper('goods'); return $dataMapper->select(' goods_id, cat_id, goods_sn, goods_name, brand_id, goods_number, market_price, shop_price, promote_price, ' . ' promote_start_date, promote_end_date, ' . ' is_real, is_shipping, sort_order, goods_type, suppliers_id ', QueryBuilder::buildAndFilter($queryCondArray), array('order' => 'sort_order desc, goods_id desc', 'offset' => $offset, 'limit' => $limit), $ttl); }