当前位置:Gxlcms > PHP教程 > ZendFramework教程之Zend_Db_Table用法详解,zendzend_db_table_PHP教程

ZendFramework教程之Zend_Db_Table用法详解,zendzend_db_table_PHP教程

时间:2021-07-01 10:21:17 帮助过:6人阅读

Zend Framework教程之Zend_Db_Table用法详解,zendzend_db_table


本文实例讲述了Zend_Db_Table用法。分享给大家供大家参考,具体如下:

1. 简介

Zend_Db_Table 是Zend Framework的表模块.它通过zend_db_adapter连接到 数据库,为数据库模式检查表对象,并对该表进行操作和查询.

2. 开始

首先需要为抽象类zend_db_table(ares注:该类为抽象类,所以不能直接实例 化,只能先继承该类,然后实例化子类)设定一个默认对数据库adapter;除非你 指定其他类型数据库adapter,否则,所有的zend_db_table类实例都会使用 默认adapter.

  1. <?php
  2. // 建立一个 adapter
  3. require_once 'Zend/Db.php';
  4. $params = array (
  5. 'host' => '127.0.0.1',
  6. 'username' => 'malory',
  7. 'password' => '******',
  8. 'dbname' => 'camelot'
  9. );
  10. $db = Zend_Db::factory('PDO_MYSQL', $params);
  11. // 为所有的Zend_Db_Table对象设定默认的adapter
  12. require_once 'Zend/Db/Table.php';
  13. Zend_Db_Table::setDefaultAdapter($db);
  14. ?>

接下来,我们假定数据库中存在一个名为”round_table”的表.要对该表 使用zend_db_table,只需继承zend_db_table类创建一个名为RoundTable的 新类.然后我就可以通过该类在数据库中的round_table表中检查,操作数据 行并且取得数据结果.

  1. <?php
  2. class RoundTable extends Zend_Db_Table {}
  3. $table = new RoundTable();
  4. ?>

3. 表名和主键

默认情况下,zend_db_table类会将其类名当作数据库中表名(大小写不同 的地方需要添加"_").例如,一个名为SomeTableName的zend_db_table类在 数据库中就对应表”some_table_name”.假如不希望将类名与数据库表名以 这种添加下划线的形式进行对应,可以在定义该类时对$_name进行重构.

  1. <?php
  2. class ClassName extends Zend_Db_Table
  3. {
  4. // 默认表名为 'class_name'
  5. // 但是我们也可以对应其它表
  6. protected $_name = 'another_table_name';
  7. }
  8. ?>

zend_db_table类默认字段”id”为表的主键(该字段最好为自增的,但并不 是必须的).假如该表的主键并不是名为”$id”,你可以在定义表实体类时 对$_primary进行重构

  1. <?php
  2. class ClassName extends Zend_Db_Table
  3. {
  4. // 默认主键为'id'
  5. // 但我们也可以设定其他列名为主键
  6. protected $_primary = 'another_column_name';
  7. }
  8. ?>

你也可以通过表实体类中_setup()方法设定这些变量;但是需要确保在修改 后再执行一次parent::_setup()方法.

  1. <?php
  2. class ClassName extends Zend_Db_Table
  3. {
  4. protected function _setup()
  5. {
  6. $this->_name = 'another_table_name';
  7. $this->_primary = 'another_column_name';
  8. parent::_setup();
  9. }
  10. }
  11. ?>

4. 插入数据

要在表中插入一行新数据,只需要将列名:数据的关联数组作为参数,调 用insert()方法即可.

(zend framework)会自动对数据进行加引号处理, 并返回插入的最后一行的id值
(注意:这里不同于 zend_db_adapter::insert方法,后者返回的是插入的行数).

  1. <?php
  2. //
  3. // INSERT INTO round_table
  4. // (noble_title, first_name, favorite_color)
  5. // VALUES ("King", "Arthur", "blue")
  6. //
  7. class RoundTable extends Zend_Db_Table {}
  8. $table = new RoundTable();
  9. $data = array(
  10. 'noble_title' => 'King',
  11. 'first_name' => 'Arthur',
  12. 'favorite_color' => 'blue',
  13. )
  14. $id = $table->insert($data);
  15. ?>

5. 更新数据

要修改表中的任意行数据,我们可以设定一个列名:数据的关联数组作为参数,调 用update()方法,同是通过一个where条件从句来决定需要改变的行.该方法将会 修改表中数据并返回被修改的行数.

(Zend frameword)将会自动对修改对数据进行加引号处理,但是这种检查不包括 条件分句,所以你需要使用该表的zend_db_adapter对象完成该工作.

  1. class RoundTable extends Zend_Db_Table {}
  2. $table = new RoundTable();
  3. $db = $table->getAdapter();
  4. $set = array(
  5. 'favorite_color' => 'yellow',
  6. )
  7. $where = $db->quoteInto('first_name = ?', 'Robin');
  8. $rows_affected = $table->update($set, $where);

6. Deleting Rows

要删除表中的数据,我们可以调用delete()方法,同时通过一个where条件 分句来决定需要删除的行.该方法将会返回被删除的行数.

(zend framework)不会对条件分句进行加引号处理,所以你需要使用该表 的zend_db_adapter对象完成该工作

  1. <?php
  2. //
  3. // DELETE FROM round_table
  4. // WHERE first_name = "Patsy"
  5. //
  6. class RoundTable extends Zend_Db_Table {}
  7. $table = new RoundTable();
  8. $db = $table->getAdapter();
  9. $where = $db->quoteInto('first_name = ?', 'Patsy');
  10. $rows_affected = $table->delete($where);
  11. ?>

7. 根据主键查找数据

通过调用find()方法,可以使用主键值轻松地在表中检索数据.假如你只想要查询某 一条数据,该方法将回返回一个zend_db_table_row对象,而当你想要查询多条记录时 ,将会返回一个zend_db_table_rowset对象.

  1. <?php
  2. class RoundTable extends Zend_Db_Table {}
  3. $table = new RoundTable();
  4. // SELECT * FROM round_table WHERE id = "1"
  5. $row = $table->find(1);
  6. // SELECT * FROM round_table WHERE id IN("1", "2", 3")
  7. $rowset = $table->find(array(1, 2, 3));
  8. ?>

8. 取回一条记录

虽然通过主键找到相应数据行是很便利的事情,但是在更多的时候,我们是 通过其他一些非主键的条件来查找数据行的.zend_db_table提供了一个 fetchRow()方法可以实现这个功能.我们可以通过一个where条件语句(和一 个可选的order语句)调用fetchRow()方法,然后zend_db_tabel将会返回满 足条件的第一行数据的zend_db_table_row对象.

注意,(zend framework) 将不会对where语句进行加引号处理,所以你需要 通过zend_db_adapter进行数据处理

  1. <?php
  2. //
  3. // SELECT * FROM round_table
  4. // WHERE noble_title = "Sir"
  5. // AND first_name = "Robin"
  6. // ORDER BY favorite_color
  7. //
  8. class RoundTable extends Zend_Db_Table {}
  9. $table = new RoundTable();
  10. $db = $table->getAdapter();
  11. $where = $db->quoteInto('noble_title = ?', 'Sir')
  12. . $db->quoteInto('AND first_name = ?', 'Robin');
  13. $order = 'favorite_color';
  14. $row = $table->fetchRow($where, $order);
  15. ?>

9. 取回多条记录

假如需要一次检索多条记录.可以使用fetchAll()方法.和使用fetchRow()方法类 似,该方法不仅仅可以设定where和order分句,也可以设定limit-count和 limit-offset值来限制返回的结果数.执行该方法后,把选择的结果作为一个 Zend_Db_Table_Rowset对象返回.
注意,(zend framework) 将不会对where语句进行加引号处理,所以你需要 通过zend_db_adapter进行数据处理.

  1. <?php
  2. class RoundTable extends Zend_Db_Table {}
  3. $table = new RoundTable();
  4. $db = $table->getAdapter();
  5. // SELECT * FROM round_table
  6. // WHERE noble_title = "Sir"
  7. // ORDER BY first_name
  8. // LIMIT 10 OFFSET 20
  9. $where = $db->quoteInto('noble_title = ?', 'Sir');
  10. $order = 'first_name';
  11. $count = 10;
  12. $offset = 20;
  13. $rowset = $table->fetchAll($where, $order, $count, $offset);
  14. ?>

10. Adding Domain Logic

作为Zend Framework的表模块,Zend_Db_Table将它自己很好的封装到独特的domain logic下. 例如,你可以重载insert()和update()方法,以实现在数据更改提交前的操作和验证.

  1. <?php
  2. class RoundTable extends Zend_Db_Table
  3. {
  4. public function insert($data)
  5. {
  6. // 添加一个时间戳
  7. if (empty($data['created_on'])) {
  8. $data['created_on'] = time();
  9. }
  10. return parent::insert($data);
  11. }
  12. public function update($data)
  13. {
  14. // 添加一个时间戳
  15. if (empty($data['updated_on'])) {
  16. $data['updated_on'] = time();
  17. }
  18. return parent::update($data);
  19. }
  20. }
  21. ?>

类似的,你也可以设定自己的find()方法,通过主键外的其他字段来查询数据.

  1. <?php
  2. class RoundTable extends Zend_Db_Table
  3. {
  4. public function findAllWithName($name)
  5. {
  6. $db = $this->getAdapter();
  7. $where = $db->quoteInto("name = ?", $name);
  8. $order = "first_name";
  9. return $this->fetchAll($where, $order);
  10. }
  11. }
  12. ?>

更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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

您可能感兴趣的文章:

  • Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
  • Zend Framework教程之Zend_Db_Table_Row用法实例分析
  • Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
  • Zend Framework开发入门经典教程
  • Zend Framework框架Smarty扩展实现方法
  • Zend Framework框架路由机制代码分析
  • Zend Framework实现具有基本功能的留言本(附demo源码下载)
  • Zend Framework实现将session存储在memcache中的方法
  • Zend Framework分页类用法详解
  • Zend Framework实现多文件上传功能实例
  • Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
  • Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
  • Zend Framework教程之Zend_Db_Table表关联实例详解

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1113742.htmlTechArticleZend Framework教程之Zend_Db_Table用法详解,zendzend_db_table 本文实例讲述了Zend_Db_Table用法。分享给大家供大家参考,具体如下: 1. 简介 Zend_Db_T...

人气教程排行