ZendFramework2连接数据库操作实例

5年以前  |  阅读数:1200 次  |  编程语言:PHP 

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

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

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例