zend framework2

zf2对数据库的操作基类:

<?php

namespace Oa\Model;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\Sql\Delete;
use Zend\Db\TableGateway\TableGateway;
use Zend\Paginator\Adapter\DbSelect;
use Zend\Paginator\Paginator;
use Zend\Db\Sql\Select;
use Zend\Db\Sql\Where;
use Zend\Db\Sql\Sql;
use Zend\ServiceManager\ServiceManager;
use Zend\Log\Formatter\Simple;
use Zend\Log\Writer\Stream;
use Zend\Log\Logger;
use Oa\Exception\ErrorException;
class BaseTable
{
   protected $tableName;
   protected $tableModel;
   protected $tableGateway;
   protected $sm;
   protected $adapter;
   public $logger;
   //构造引入ServiceManager
   public function __construct(ServiceManager $sm)
   {
       $this->sm = $sm;
       $date = date('Y-m-d');
       $formatter = new Simple(null,'Y-m-d H:i:s');
       $writer = new Stream(APP.'/data/log/'.$date.'.log');
       $writer->setFormatter($formatter);
       $this->logger = new Logger();
       $this->logger->addWriter($writer);
   }

   //获取adapter
   public function getAdapter()
   {
       if(!$this->adapter)
       {
           $this->adapter = $this->sm->get('Zend\Db\Adapter\Adapter');
       }
       return $this->adapter;
   }
   //获取tableGateway
   public function getTableGateway()
   {
       if(!$this->tableGateway)
       {
          // $this->tableGateway = new TableGateway($this->tableName,$this->getAdapter(),null,new ResultSet(ResultSet::TYPE_ARRAYOBJECT));
           $this->tableGateway = new TableGateway($this->tableName,$this->getAdapter(),null,new ResultSet(ResultSet::TYPE_ARRAYOBJECT));
       }
       return $this->tableGateway;
   }
   //获取表中所有信息
   public function fetchAll(array $where = null,$order = null,$limit = null,$offset = null){
       $select = new Select($this->tableName);
       if(!empty($order))
       {
           $select->order($order);
       }

       if(!is_null($where))
       {
           foreach ($where as $item) {
               if(!is_object($item) && !is_array($item))
               {
                   $select->where($where);
                   break;
               }
               $select->where($item);
           }
       }
       if(!empty($limit))
       {
           $select->limit($limit);
           if(!empty($offset))
           {
               $select->offset($offset);
           }
       }


       //$resultSet = $this->tableGateway->selectWith($select);
       $sql = new Sql($this->getAdapter());
       $selectString = $sql->getSqlStringForSqlObject($select);
       $resultSet = $this->getAdapter()->query($selectString,'execute');
       return $resultSet;
     
   }

   public function executeStr($data)
   {
       if(empty($data))
       {
           return false;
       }
       $sql = new Sql($this->getAdapter());
       $insert = $sql->insert($this->tableName);
       try {
            $insert->values($data);

             $sqlString = $sql->getSqlStringForSqlObject($insert);

             return  $this->getAdapter()->query($sqlString,'execute');
       }catch (\Exception $e)
       {
           //记录日志
           $this->logger->err($this->tableName.'表插入数据出错,'.$e->getMessage());
           //抛出自定义错误
           throw new ErrorException('插入内容出错');
       }

   }
   //根据id获取一条记录
   public function fetchOne($where =[],$order = null)
   {
       $select = new Select($this->tableName);
       if(!empty($where)) {
           foreach ($where as $item) {
               if (!is_array($item)) {
                   $select->where($where);
                   break;
               }
               $select->where($item);
           }
       }
       if(!empty($order))
       {
           $select->order($order);
       }
       $resultSetPrototype = new \Zend\Db\ResultSet\ResultSet;
       $resultSetPrototype->setArrayObjectPrototype(new $this->tableModel);
       $tableGateway = new TableGateway($this->tableName,$this->getAdapter(),null,$resultSetPrototype);

       $row = $tableGateway->selectWith($select)->current();

       return $row;
   }

   public function insert($data)
   {
       if(empty($data))
       {
           return false;
       }

       try {
           $this->getTableGateway()->insert($data);
       }catch (\Exception $e)
       {
           $this->logger->err($this->tableName.'表插入数据出错,'.$e->getMessage());
           throw new ErrorException('数据插入出错');
       }

       return $this->getTableGateway()->lastInsertValue;
   }

   public function update($data,$where = null)
   {
       if(empty($data))
       {
           return false;
       }
       try {
         return  $this->getTableGateway()->update($data,$where);
       }catch (\Exception $e)
       {
           //记录日志
           $this->logger->err($this->tableName.'表更新数据出错,'.$e->getMessage());
           //抛出自定义错误
           throw new ErrorException('提交内容出错');
       }

   }

   protected function save($obj)
   {
       $data = get_object_vars($obj);
       $id = (int)$data['id'];
       unset($data['id']);
       if (!$id) {
           return $this->insert($data);
       } else {
           if ($this->fetchOne(['id' => $id])) {

               return $this->update($data, ['id' => $id]);
           } else {
               return false;
           }

       }
   }
   public function delete($where)
   {
       if(empty($where))
       {
           return false;
       }
       try {
           return $this->getTableGateway()->delete($where);
       }catch (\Exception $e)
       {
           $this->logger->err($this->tableName.'表删除数据出错,'.$e->getMessage());
           //抛出自定义错误
           throw new ErrorException('删除出错');
       }
   }
   public function deleteAll()
   {
       $sql = new Sql($this->getAdapter());
       $delete = $sql->delete();
       $delete->from($this->tableName);
       $statement = $sql->prepareStatementForSqlObject($delete);
       $statement->execute();
   }





   //分布查询

   public function _getPaginator($where = null,$order = null) {
       $select = new Select($this->tableName);
       if(!empty($order)) {
       $select->order($order);
       }

       if(!is_null($where)) {
           foreach($where as $item)
           {
               $select->where($item);
           }

       }

       $resultSetPrototype = new \Zend\Db\ResultSet\ResultSet();
       $resultSetPrototype->setArrayObjectPrototype(new $this->tableModel);
       $paginatorAdapter = new DbSelect (
                   $select,
                   $this->getAdapter(),
                   $resultSetPrototype
               );
       
       $paginator = new Paginator($paginatorAdapter);
       return $paginator;
   }
   
}



?>
此代码只能参考,不能照搬,有一些关联其它代码。
实现类:
<?php

namespace Oa\Model;
use Zend\Db\TableGateway\TableGateway;
use Oa\Model\Userinfo;
use Oa\Model\BaseTable;

class UserinfoTable extends BaseTable
{
   public $tableModel = 'Oa\Model\Userinfo';
   public $tableName = 'userinfo';

   public function saveAs(Userinfo $obj)
   {
       return parent::save($obj); // TODO: Change the autogenerated stub
   }

   public function getPaginator($where = null , $order = null)
   {
       return parent::_getPaginator( $where , $order); // TODO: Change the autogenerated stub
   }

}



?>

贴出代码,学会分享,希望得到高手的指正!!!

你可能感兴趣的:(数据库操作,zf2)