`
zhangchibang
  • 浏览: 339550 次
社区版块
存档分类
最新评论

zend framework中实现ORM

阅读更多

Zend Framework使用Zend_Db_Table来实现类似于ActiveRecord的ORM功能。和任何ORM一样,首先需要为它配置数据库的相关信息(服务器,用户名,密码,数据库名,等等)。虽然这并不复杂,但本文不拟讨论这些细节问题。(Zend Framework在它的Roadmap中计划支持YAML!)一旦配置完成后,可以在/application/models子目录下创建和数据库表相对应的模型类。
  举例来说,在数据库中存在表user,结构如下:
  
  CREATE TABLE user (
  id int(11) NOT NULL auto_increment,
  name varchar(100) NOT NULL,
  password varchar(100) NOT NULL,
  PRIMARY KEY (id)
  )
  
   相应地,可以在models目录下创建一个模型:
  
  root/application/models/User.php
  
  <?php
  class User extends Zend_Db_Table
  {
  protected $_name = 'user';
  }
  
   所有数据库相关的代码,都已经被封装在抽象类Zend_Db_Table中。有ROR经验的读者,可以和ROR中的模型对比一下:
  
  Class User < ActiveRecord::Base
  End
  
   Zend Framework的模型仅仅多出了一行,就是把数据库表名赋予$_name属性。
   下面来看看怎么使用这个User模型类。新的indexAction方法如下:
  
  function indexAction() {
  …
  $user = new User();
  $view->user = $user->fetchAll();
  echo $view->render();
  }
  
   User类的fetchAll()返回一个数组,包含该表中所有的内容。这个数组被存放在$view的user属性。接下来,看看新的index.phtml:
  
  …
  <table>
  <tr>
  <th>Id</th>
  <th>Name</th>
  </tr>
  <?php foreach($this->user as $user) : ?>
  <tr>
  <td><?php echo $this->escape($user->id);?></td>
  <td><?php echo $this->escape($user->name);?></td>
  </tr>
  <?php endforeach; ?>
  </table>
  …
  
   这段代码遍历了$this->user,并将它的属性依次打印出来。

评论

相关推荐

Global site tag (gtag.js) - Google Analytics