我对 Zend 框架和 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
}
似乎有很多我总能找到的方法来访问数据库(fetchAll()、find()、fetchAll() 通过适配器、insert()、createRow() 和 save()、select() 对象)我自己会回到文档中找出我应该做什么。
SO 教会了我准备好的语句是要走的路,我一直在尝试使用行集和行(我应该这样做吗?),但我仍然对 什么是最好的交互方式感到困惑使用数据库?
(为这个非常开放式的问题道歉)
最佳答案
一般来说,人们更喜欢通过 Table 和 Row 对象来访问数据库,以符合他们面向对象编程的习惯。
如果您需要编写代码来转换或验证查询输入或输出,OO 方法非常有用。您还可以在 Table 或 Row 类中编写自定义方法来封装经常需要的查询。
但是面向对象的接口(interface)被简化了,无法执行您可能需要执行的所有类型的数据库操作。因此,当您需要更好地控制 SQL 时,您可以更深入地研究并针对 Zend_Db_Adapter 方法(如 query()
和 fetchAll()
)运行 SQL 查询。
这对于面向对象的数据库接口(interface)非常常见。一个可以复制每个 SQL 特性的 OO 层会非常复杂。因此,为了妥协,OO 层通常会尝试提供简单的方法来完成最常见的任务,同时让您能够在必要时潜入幕后。
这是对您非常笼统的问题的非常笼统的回答。
关于php - Zend 框架 : Proper way to interact with database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/445399/