SQL查询属于MVC项目在哪里?

时间:2014-09-21 16:03:58

标签: php sql model-view-controller

上周我读过一本关于MVC的书和关于设计模式的一般书,但我仍然对我的代码中SQL查询的位置感到困惑:模型还是控制器?

我们举一个非常简单的例子,你有一个/热门页面,可以在网站上打印5个最受欢迎的故事。

在您的模型中,您将拥有一个准备好的staments类,以及一个用于协助创建SELECT查询的类。在您看来,您拥有显示/热门页面的HTML元素。

查询在哪里"选择最受欢迎的故事LIMIT 5"属于?这是控制器类应该问的问题,从模型中获取查询方法并传递给视图,还是应该在与/热门页面相关的模型类上声明查询?

区别是否相关?将该查询置于控制器或模型上是否都被认为是构建MVC的专业方法?

谢谢。似乎大多数人都不清楚理解控制器上的内容

编辑:感谢大家的帮助。不幸的是,作为一个新帐户,我无法推荐任何有用的帖子

2 个答案:

答案 0 :(得分:-1)

通常(根据我对MVC框架的经验),模型层负责处理MVC中与数据库相关的东西。

考虑以下方法:

  1. 创建涵盖所有数据库操作(选择,更新等)的抽象类。每个表都是一个扩展此类的PHP类。然后,您可以在私有字段,构造函数或模型名称中定义数据库表名称。
  2. 每个控制器(或单个控制器)都会加载所需的模型,并使用其方法将数据作为关联数组或对象获取,删除数据,进行更改。
  3. 完成所有数据库操作后,控制器返回视图并将数据作为参数传递。
  4. 请注意,模型是放置所有验证规则的好地方,也是一些辅助方法,因为它们可以在PHPUnit中轻松测试。

答案 1 :(得分:-1)

这是一个关于它如何运作的非常简约的例子。

// Model.php

<?php

class Model
{

  public function __construct(Database $db){
    $this->db = $db;
  }

  public function getPosts() {
    $this->db->query("YOUR SQL QUERY HERE");
    return $this->db->single();
  }
}

// Controller.php

<?php

class Controller
{
  public function __construct() {
   $this->model = new Model($dbh);
  }

  public function postsPage() {
    $posts = $this->model->getPosts();
    // TODO: render posts
  }
}

基本上,您在控制器中实例化数据库,以便将其注入您使用的任何模型。数据库处理程序可以是您创建的类(&lt; - 我推荐这个)或只是PDO处理程序。总的来说,控制器会向模型请求信息,控制器将调用视图类来相应地呈现。