当前位置:  开发笔记 > 编程语言 > 正文

Zend Framework:与数据库交互的正确方法?

如何解决《ZendFramework:与数据库交互的正确方法?》经验,为你挑选了2个好方法。

我是Zend Framework和MVC的新手,我对Zend_DB和与数据库交互的正确方法感到有些困惑.

我正在使用PDO MySQL适配器并创建了一些类来扩展抽象类:

class Users extends Zend_Db_Table_Abstract {
    protected $_name = 'users';
    protected $_primary = 'user_id';
    protected $_rowClass = 'User';

    public function getUserbyID($id) { /* code */ }
    // More code here
}
class User extends Zend_Db_Table_Row_Abstract {
    // Code here
}
class Widgets extends Zend_Db_Table_Abstract {
    protected $_name = 'widgets';
    protected $_rowClass = 'Widget';

    public function getWidgetsfromUser($userid) { /* code */ }
    // More code here
}
class User extends Zend_Db_Table_Row_Abstract {
    public function doSomethingWithWidget() { /* code */ }
    // More code here
}

似乎有很多方法来访问DB(fetchAll(),find(),fetchAll()通过适配器,insert(),createRow()和save(),select()对象)我总是发现自己要回去向文档弄清楚我应该做什么.

SO告诉我准备好的语句是要走的路,我一直在尝试使用行集和行(我应该是吗?),但我仍然对与数据库进行交互的最佳方式感到困惑

(为非常开放的问题道歉)



1> Bill Karwin..:

通常,人们更喜欢通过Table和Row对象访问数据库,以匹配他们面向对象编程的习惯.

如果您需要编写代码来转换或验证查询输入或输出,则OO方法很有用.您还可以在Table或Row类中编写自定义方法来封装常用的查询.

但面向对象的界面已经简化,无法执行您可能需要执行的所有类型的数据库操作.因此query(),fetchAll()当您需要更好地控制SQL时,您可以深入研究并针对Zend_Db_Adapter方法运行SQL查询.

这对于面向对象的数据库接口来说非常常见.可以复制每个 SQL功能的OO层将非常复杂.因此,为了妥协,OO层通常会尝试提供简单的方法来完成最常见的任务,同时让您能够在必要时进行覆盖.

这是对你一般性问题的一般回答.



2> Brian Fisher..:

使用Zend_Db,您可能不想深入了解预处理语句等的细节.您只想使用模型对象来执行基本的CRUD(创建,读取,更新和删除).我知道程序员参考指南很广泛,但它是对Zend_Db的一个很好的介绍.您可能需要仔细查看Zend_Db_Table文档.

但要快速回答你的问题.除非您需要覆盖某些默认行为,否则您不需要扩展Zend_Db_Table_Row_Abstract.你也可以将Users类简化为:

class Users extends Zend_Db_Table_Abstract {
  protected $_name = 'users';

  // Code here
}

然后使用它你会做一些你提到的事情使用以下内容:

//Create a Users Model Object
$usersDb = new Users();

//Find the record with user_id = 4 and print out their name
$row = $usersDb->find(4);
echo $row->first_name . ' ' . $row->last_name

//Change the first name of this user to Brian    
$row->first_name = 'Brian';
$row->update();

//Insert a user into the database
$data = array(
  'first_name' => 'Gilean',
  'last_name' => 'Smith');
$usersDb->insert($data);

//Retrieve all users with the last name smith and print out their full names
$rows = $usersDb->fetchAll($usersDb->select()->where('last_name = ?', 'smith'));    
foreach ($rows as $row) {
  echo $row->first_name . ' ' . $row->last_name
}

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有