时间:2021-07-01 10:21:17 帮助过:26人阅读
init();
}
/**
* 初始化操作
*/
abstract protected function init();
/**
* 获取db源
*
* @param string $rule
* @return Gospel_Db_Adapter
*/
public function getAdapter($rule='master'){
return Gospel_Db_Adapter::getInstance($rule);
}
/**
* 获取db名称
*
* @param string $rule
* @return string
*/
public function getDatabase($rule=''){
return $this->_database;
}
/**
* 活去表名称
*
* @param string $rule
* @return string
*/
public function getTable($rule=''){
return $this->_table;
}
/* 获取多条记录
* @see Gospel/Dao/Gospel_Dao_Interface#getItems($rule, $where, $sort, $offset, $limit, $pager, $flag)
*/
public function getItems($rule, $where, $sort='', $offset, $limit, $pager=0, $flag='slave'){
$return = array();
if($where){
$query = 'SELECT * FROM ';
$query .= $this->getTable($rule);
$query .= ' WHERE '.$this->getWhere($where);
if($sort){
$query .= ' ORDER BY '.$sort;
}
$page = $page>0?$page:1;
$psize = $psize>0?$psize:10;
$offset = ($page-1)*$psize;
$query .= ' LIMIT '.$offset.','.$psize;
$data = $this->getAdapter($flag)->queryAll($query);
if($pagination){
$return['data'] = array();
if($data){
$rtotal = $this->getWhereTotal($rule, $where);
$return['data'] = $data;
$return['pager'] = array(
'page'=>$page,
'psize'=>$psize,
'rtotal'=>$rtotal,
'ptotal'=>ceil($rtotal/$psize)
);
}else{
$return['pager'] = array(
'page'=>$page,
'psize'=>$psize,
'rtotal'=>0,
'ptotal'=>0
);
}
}else{
$return = $data;
}
}
return $return;
}
/* 获取单条记录
* @see Gospel/Dao/Gospel_Dao_Interface#getItem($rule, $where, $sort, $flag)
*/
public function getItem($rule, $where, $sort='', $flag='slave'){
$return = array();
if($where){
$query = 'SELECT * FROM ';
$query .= $this->getTable($rule);
$query .= ' WHERE '.$this->getWhere($where);
if($sort != ''){
$query .= ' ORDER BY '.$sort;
}
$query .= ' LIMIT 0,1';
$return = $this->getAdapter($flag)->queryRow($query);
}
return $return;
}
/* 获取表字段信息
* @see Gospel/Dao/Gospel_Dao_Interface#getTableFields($rule, $flag)
*/
public function getTableFields($rule, $flag='master'){
return $this->getAdapter($flag)->getTableFields($this->getTable($rule));
}
/* 更新记录
* @see Gospel/Dao/Gospel_Dao_Interface#update($rule, $where, $set)
*/
public function update($rule, $where, array $set){
$return = 0;
if($where && $set){
$query = 'UPDATE `'.$this->getTable($rule);
$query .= '` SET '.$this->getSet($set);
$query .= ' WHERE '.$this->getWhere($where);
if($query){
$return = $this->getAdapter('master')->queryUpdate($query);
}
}
return $return;
}
/* 统计记录数
* @see Gospel/Dao/Gospel_Dao_Interface#getWhereTotal($rule, $where, $flag)
*/
public function getWhereTotal($rule, $where, $flag='slave'){
$return = 0;
if($where){
$sql = 'SELECT COUNT(*) FROM '.$this->getTable($rule);
$sql .= ' WHERE '.$this->getWhere($where);
$return = $this->getAdapter()->queryTotal($sql);
}
return $return;
}
/* 添加记录
* @see Gospel/Dao/Gospel_Dao_Interface#add($rule, $row)
*/
public function add($rule, array $row){
$return = 0;
if($row){
$keys = '';
$values = '';
foreach($row as $key=>$value){
$keys .= '`'.$key.'`,';
if(substr($key, 0, 1) == 'n'){
$values .= $value.',';
}else{
$values .= "'".$value."',";
}
}
$keys = substr($keys, 0, -1);
$values = substr($values, 0, -1);
$query = 'INSERT INTO `';
$query .= $this->getTable($rule);
$query .= '`('.$keys.') VALUES(';
$query .= $values.')';
$return = $this->getAdapter('master')->queryUpdate($query);
}
return $return;
}
/* 删除记录
* @see Gospel/Dao/Gospel_Dao_Interface#del($rule, $where, $lines)
*/
public function del($rule, $where, $lines=1){
$return = 0;
if($where){
$query = 'DELETE FROM `';
$query .= $this->getTable($rule);
$query .= '` WHERE '.$this->getWhere($where);
$query .= ' LIMIT '.$lines;
$return = $this->getAdapter('master')->queryUpdate($query);
}
return $return;
}
/**
* 格式化where语句
*
* @param string|array $where
* @return string
*/
private function getWhere($where){
$return = '';
if(is_array($where)){
$return .= implode(' AND ', $where);
}else{
$return .= $where;
}
return $return;
}
/**
* 格式化成更新语句格式
*
* @param array $set
* @return String
*/
private function getSet(array $set){
$return = '';
if($set){
foreach ($set as $key=>$val){
if (substr($key, 0, 1) != 'n'){
$return .= '`'.$key."`='".$val."',";
}else{
$mk = substr($val, 0, 1);
if(is_numeric($mk)){
$return .= '`'.$key."`=".$val.",";
}else{
$v = intval(substr($val, 1));
if($mk == '+'){
$return .= '`'.$key.'`=`'.$key.'`+'.$v.',';
}elseif($mk == '-'){
$return .= '`'.$key.'`=`'.$key.'`-'.$v.',';
}
}
}
}
$return = substr($return, 0, -1);
}
return $return;
}
}
//end