我是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告诉我准备好的语句是要走的路,我一直在尝试使用行集和行(我应该是吗?),但我仍然对与数据库进行交互的最佳方式感到困惑?
(为非常开放的问题道歉)
通常,人们更喜欢通过Table和Row对象访问数据库,以匹配他们面向对象编程的习惯.
如果您需要编写代码来转换或验证查询输入或输出,则OO方法很有用.您还可以在Table或Row类中编写自定义方法来封装常用的查询.
但面向对象的界面已经简化,无法执行您可能需要执行的所有类型的数据库操作.因此query()
,fetchAll()
当您需要更好地控制SQL时,您可以深入研究并针对Zend_Db_Adapter方法运行SQL查询.
这对于面向对象的数据库接口来说非常常见.可以复制每个 SQL功能的OO层将非常复杂.因此,为了妥协,OO层通常会尝试提供简单的方法来完成最常见的任务,同时让您能够在必要时进行覆盖.
这是对你一般性问题的一般回答.
使用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 }