php - Zend 框架 : Proper way to interact with database?

标签 php mysql database zend-framework zend-db-table

我对 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/

相关文章:

sql - 交叉检查用户列表和数据库上的用户 - 坏主意?

sql-server - 如何在 SQL Server 2012 中将数据类型从 date 更改为 int?

PHP HTML 创建库

php - selectcommand 的奇怪行为

python - 我如何知道在执行 cursor.execute() 时查询是否正确执行?

mysql - 缓慢的 MySQL 查询 : Is there a way to avoid doing a conditional select count for each row with a left join?

mysql - 在 MySQL 中按别名选择列

php - docker 上带有 Nginx、php 7.4 fpm 和 mysql 8 的 Laravel 6 比 php 7.1 上的 Laravel 4 慢

php - 如果为空,如何使表单忽略密码字段(symfony2 表单)

php - 处理字符集(用户输入 -> Php -> Mysql 并返回)