2016-08-01 59 views
1

所以我试图在PHP中使用MVC模式构建应用程序。MVC/PDO:模型课应该怎么样,不应该在模型类中?

我在构建模型类时遇到了问题。下面是我所与模型迄今所做的快速摘要:

<?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模式,所以我不知道我的模型类应该是什么程度。

我希望有人有我的答案!

+0

所有业务逻辑(特别是查询)应该理想地走在模型中。如果您喜欢,请阅读此内容https://en.wikipedia.org/wiki/Business_logic – rjdown

+0

我看了一下,这很有趣。谢谢 ! – tomfl

回答

3

这真的取决于你如何编写代码。您可以在当前数据库类中编写所有“抽象”。所以像

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

2
当我要选择所有邮件

发送 由特定用户,我应该在 数据库类创建一个名为select()方法或我应该写SQL查询(用一备 语句)内控制员的班级?

将方法和任何SQL查询放在Model类中,Database在这种情况下。这个select()方法可能会从控制器传递给它的一些参数用于查询中,如本例中的用户标识。

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

+0

但是,如果控制器已经做到了,为什么视图需要处理任何数据? – tomfl

+1

该视图不“处理”数据,只是显示它。控制器接收用户输入并将其传递给模型,模型对其进行操作并将其交给视图,并由视图显示。 – alzee