MVC/PDO:什么应该和不应该;不要在模型类中


MVC/PDO : What should and shouldn't be in a model class?

所以我正试图在PHP中构建一个遵循MVC模式的应用程序。

我在建立我的模型类时遇到了问题。以下是我迄今为止对模型所做工作的快速总结

<?php
class Database {

    private $_db;
    private $_host;
    private $_dbname;
    private $_user;
    public function __construct($host, $dbname, $user, $password = '') {
        if (empty($host) OR empty($dbname) OR empty($user)) {
            return false;
        }
        $this->_db = new PDO('mysql:host=' . $host . ';dbname=' . $dbname, $user, $password);
        $this->_host = $host;
        $this->_dbname = $dbname;
        $this->_user = $user;
    }
    // Checks if a given table already exists
    public function tableExists($table) {...}

}

因此,问题是:当我想将数据库与某些控制器一起使用时,例如,当我想选择特定用户发送的所有消息时,我应该在Database类中创建一个名为select()的方法,还是应该在控制器的类中编写SQL查询(使用准备好的语句)?

我真的是MVC模式的新手,所以我不知道我的模型类应该在多大程度上

我希望有人能为我找到答案!

这实际上取决于您如何编写代码。您可以在当前的Database类中编写所有的"抽象"。所以类似的东西

public function select($table)
{
  $sql = "SELECT * FROM $table"
  //run and execute
}

在一些流行的框架中,数据库上的每个表都有自己的模型类,使用这个数据库类。

class User extends Database {
 ..
}

控制器将使用所需的型号类别,

class Home extends Controller {
function __construct() {
    parent::__construct();
}
function index() {
    $this->load->model('user');
 }
}

即使您没有使用任何框架,也很高兴看到框架是如何实现这种mvc的,以帮助您开始Coddinger模型

*本教程将帮助您确定Codecourse MVC

当我想选择所有发送的邮件时对于特定用户,我是否应该在数据库类,还是应该编写SQL查询(使用语句)?

将该方法和任何SQL查询放入Model类中,在本例中为Database。这个select()方法可能会接受一些参数,这些参数将从控制器传递给它,以便在查询中使用,就像本例中的用户id一样。

控制器仅用于处理输入,将该输入转换为要由模型和/或视图处理的命令。它们本身不应该运行任何类似SQL查询的业务逻辑。