ZendFramework2连接数据库操作实例


Posted in PHP onApril 18, 2017

本文实例讲述了ZendFramework2连接数据库操作。分享给大家供大家参考,具体如下:

相对于zf1,来说,zf2让我们对于数据库这方面的操作我的个人感觉是对于字段起别名简单了,但是对数据库的操作虽然配置写好的就基本不需要动了,但是还是比1的配置要繁琐,

还是那句话,大家可以去看看源码。。。

Module.php 里面添加

public function getServiceConfig()
{
    return array(
      'factories' => array(
        'Student\Model\StudentTable' => function($sm) {
          $tableGateway = $sm->get('StudentTableGateway');
          $table = new StudentTable($tableGateway);
          return $table;
        },
        'StudentTableGateway' => function ($sm) {
          $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
          $resultSetPrototype = new ResultSet();
          $resultSetPrototype->setArrayObjectPrototype(new Student());
          return new TableGateway('cc_user', $dbAdapter, null, $resultSetPrototype);//table Name is cc_user
        },
      ),
    );
}

student.php 这个是Model/Student.php

namespace Student\Model;
class Student
{
  public $id;
  public $name;
  public $phone;
  public $mark;
  public $email;
  public function exchangeArray($data)//别名
  {
    $this->id   = (!empty($data['cc_u_id'])) ? $data['cc_u_id'] : null;
    $this->name = (!empty($data['cc_u_name'])) ? $data['cc_u_name'] : null;
    $this->phone = (!empty($data['cc_u_phone'])) ? $data['cc_u_phone'] : null;
    $this->mark = (!empty($data['cc_u_mark'])) ? $data['cc_u_mark'] : null;
    $this->email = (!empty($data['cc_u_email'])) ? $data['cc_u_email'] : null;
  }
}

StudentTable.php Model/StudentTable.php

<?php
namespace Student\Model;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;
use Zend\Db\Sql\Select;
use Zend\Paginator\Adapter\DbSelect;
use Zend\Paginator\Paginator;
class StudentTable
{
  protected $tableGateway;
  protected $table='cc_user';
  public function __construct(TableGateway $tableGateway)
  {
    $this->tableGateway = $tableGateway;
  }
  public function fetchAll($paginated)
  {//分页
     if($paginated) {
      // create a new Select object for the table album
      $select = new Select('cc_user');
      // create a new result set based on the Student entity
      $resultSetPrototype = new ResultSet();
      $resultSetPrototype->setArrayObjectPrototype(new Student());
      // create a new pagination adapter object
      $paginatorAdapter = new DbSelect(
        // our configured select object
        $select,
        // the adapter to run it against
        $this->tableGateway->getAdapter(),
        // the result set to hydrate
        $resultSetPrototype
      );
      $paginator = new Paginator($paginatorAdapter);
      return $paginator;
    }
    $resultSet = $this->tableGateway->select();
    return $resultSet;
  }
  public function getStudent($id)
  {
    $id = (int) $id;
    $rowset = $this->tableGateway->select(array('id' => $id));
    $row = $rowset->current();
    if (!$row) {
      throw new \Exception("Could not find row $id");
    }
    return $row;
  }
  public function deleteStudent($id)
  {
    $this->tableGateway->delete(array('id' => $id));
  }
  public function getLIValue(){
    return $this->tableGateway->getLastInsertValue();
  }
}

Student/IndexController.php 调用数据库

public function indexAction(){
    /* return new ViewModel(array(
      'students' => $this->getStudentTable()->fetchAll(), //不分页
    ));*/
    $page=$this->params('page');//走分页 在model.config.php里面设置:
/*model.config.php
'defaults' => array(
 'controller' => 'Student\Controller\Index',
 'action'   => 'index',
 'page'=>'1',
),
*/
    $paginator = $this->getStudentTable()->fetchAll(true);
    // set the current page to what has been passed in query string, or to 1 if none set
    $paginator->setCurrentPageNumber((int)$this->params()->fromQuery('page', $page));
    // set the number of items per page to 10
    $paginator->setItemCountPerPage(10);
    return new ViewModel(array(
      'paginator' => $paginator //模板页面调用的时候的名字
    ));
  //print_r($this->getStudentTable()->fetchAll());
}

在模板页面的调用

<?php foreach ($this->paginator as $student) : ?>
<tr id="<?php echo $this->escapeHtml($student->id);?>">
  <td><?php echo $this->escapeHtml($student->id);?></td>
  <td><?php echo $this->escapeHtml($student->name);?></td>
  <td><?php echo $this->escapeHtml($student->phone);?></td>
  <td><?php echo $this->escapeHtml($student->email);?></td>//应用了在Student.php的别名
  <td><?php echo $this->escapeHtml($student->mark);?></td>
    <td><a href='#'  class='icol-bandaid editUserInfo'></a>  
      <a href='#' class='icol-key changePwd'></a>  
      <a herf='#'  class='icol-cross deleteStud'></a>
    </td>
  </tr>
<?php endforeach;?>

希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php5.2时间相差8小时
Jan 15 PHP
PHP求最大子序列和的算法实现
Jun 24 PHP
PHP中文竖排转换实现方法
Oct 23 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
PHP MYSQL实现登陆和模糊查询两大功能
Feb 05 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
PHP中多线程的两个实现方法
Oct 14 PHP
PHP实现文件上传下载实例
Oct 18 PHP
php 中奖概率算法实现代码
Jan 25 PHP
php使用PDO执行SQL语句的方法分析
Feb 16 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
Jan 04 PHP
PHP 8新特性简介
Aug 18 PHP
PHP实现的数独求解问题示例
Apr 18 #PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 #PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
Apr 18 #PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
Apr 18 #PHP
PHP递归删除多维数组中的某个值
Apr 17 #PHP
Thinkphp5.0自动生成模块及目录的方法详解
Apr 17 #PHP
php正则表达式基本知识与应用详解【经典教程】
Apr 17 #PHP
You might like
php发送html格式文本邮件的方法
2015/06/10 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
对Xpath 获取子标签下所有文本的方法详解
2019/01/02 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
pytorch实现线性拟合方式
2020/01/15 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
美国领先的眼镜和太阳镜在线零售商:Glasses.com
2019/08/26 全球购物
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
运动员口号
2014/06/09 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
大学生毕业个人总结
2015/02/15 职场文书
党员公开承诺书2016
2016/03/24 职场文书
QT与javascript交互数据的实现
2021/05/26 Javascript
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL