MVC / PDO:模型类应该和不应该做什么?

时间:2016-08-01 22:13:56

标签: php model-view-controller pdo

所以我试图按照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) {...}


}

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

我对MVC模式真的很陌生,所以我不知道我的模型类的范围应该是什么。

我希望有人能给我答案!

2 个答案:

答案 0 :(得分:4)

这实际上取决于您编写代码的方式。您可以在当前的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以帮助您入门Codigniter model

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

答案 1 :(得分:2)

  

当我想选择发送的所有邮件时   由特定用户,我应该在中创建一个名为select()的方法   数据库类或者我应该编写SQL查询(使用准备好的   声明)在控制器的类里面?

在这种情况下,将方法和任何SQL查询放在Model类Database中。这个select()方法可能会从控制器传递一些参数,以便在查询中使用它,就像本例中的user-id一样。

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