Пример #1
0
 /**
  *
  * 取得一组记录的数目,用于分页
  *
  * @return int 查询条数
  *
  * @param mixed $table        需要查询的数据表,可以是单个表,例如:'user',
  *                      也可以是多个表的数组,例如:array('user' ,'order_info' => 'oi')
  *
  * @param array $condArray    查询条件数组,例如:
  *                            array(
  *                            array('supplier_id = ?', $supplier_id)
  *                            array('is_on_sale = ?', 1)
  *                            array('supplier_price > ? or supplier_price < ?', $priceMin, $priceMax)
  * )
  * 这些查询条件最终会用 and 拼接起来
  * @param array $optionArray  目前不支持 Having 查询,留待以后扩展
  * @param int   $ttl          缓存多少时间
  *
  */
 public function _countArray($table, array $condArray = null, array $optionArray = null, $ttl = 0)
 {
     // 构造参数验证数组
     $validatorArray = array();
     $validatorArray['table'] = $table;
     $validatorArray['ttl'] = $ttl;
     if (null != $condArray) {
         $validatorArray['condArray'] = $condArray;
     }
     if (null != $optionArray) {
         $validatorArray['optionArray'] = $optionArray;
     }
     // 参数验证
     $validator = new Validator($validatorArray, '');
     $table = $validator->required()->validate('table');
     $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);
     }
     // 创建 DataMapper
     $dataMapper = new DataMapper($table);
     if (is_string($table)) {
         //简单的单表查询
         $table = array($table);
     }
     if (is_array($table)) {
         // 复杂的多表查询
         return $dataMapper->selectCount($table, $filter, $optionArray, $ttl);
     }
     throw new \InvalidArgumentException('table should be string or array');
 }