2016-08-01 69 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

相關問題