2017-09-01 54 views
0

我已經創建了一個通用模型函數來從Mysql中獲取數據。我可以對所有選擇的數據使用此功能。如何簡化codeigniter中的模型函數

//Controller 

$where = array('user_id' => 1); 
$data['all_rewards'] = $this->select->selectData('tbl_example1', $where, null, 'user_id', 10, 1); 

//Model 

public function selectData($table, $where, $group_by, $order_by, $limit, $start) { 
    $this->db->select('*'); 
    $this->db->from($table); 
    if(!empty($where)) 
     $this->db->where($where); 
    if(!empty($group_by)) 
     $this->db->group_by($group_by); 
    if(!empty($order_by)) 
     $this->db->order_by($order_by, 'DESC'); 
    if(!empty($limit) or !empty($start)) 
     $this->db->limit($limit, $start); 

    $query = $this->db->get(); 

    return $query->num_rows() > 0 ? $query->result_array() : 0 ; 
} 

上述代碼工作正常。

只是我想知道是否有任何簡化的方法,而不是我的函數從數據庫中選擇數據。而且我的方法是否正確。

回答

1

我不確定這種方法是否會存在,一旦您的應用程序開始增長。很快你會遇到選擇查詢,這是你的通用功能無法實現的(例如,如果你需要「選擇類似」或只選擇某些字段而不是(*))。

這實際上是一個廣泛的問題,關於如何創建一個好的MVC架構。

稍微好一些的方法不是試圖編寫一個能夠滿足所有可能的select語句的通用函數,而是爲典型的簡單查詢(如SelectAll或SelectOne或SelectRow)編寫簡寫函數。

一般來說,模型應該實現訪問系統中模型表示的特定數據或數據庫表的方法。如果您希望概括這些查詢,請考慮擴展CodeIgniter查詢構建器,並在您認爲合適的情況下在模型中使用擴展功能。

比方說,例如,你需要從表中得到一個單場速記:

function selectOne($table, $field, $id){ 
    $this->db->select($field); 
    $this->db->from($table); 
    $this->db->where('id', $id); 
} 

調用該函數將是非常可讀和自我記錄:

selectOne('product', 'price', 5); 

這樣您可以抽象出在您的應用程序中獲取數據的許多典型方法。