2012-07-13 66 views
3

使用笨,我發現所有的模型下面的代碼是從數據庫中收集數據:笨:返回FALSE如果活動記錄無法找到任何數據

// .. taken from function get_user_data($user_id) 
// Select data 
$user_data = $this->db->from('users')->where('id', $user_id)->get()->row(); 

// Check if we got any matches 
if(isset($user_data->id)) { 

    // Indeed we did, return the data found 
    return $user_data 

} else { 

    // Nope, no data found 
    return FALSE; 

} 

有趣的是,我檢查該查詢實際上返回了任何數據。我爲每個查詢都這樣做,這加起來相當多重複代碼

有沒有什麼辦法可以覆蓋CodeIgniter函數,如果沒有數據被發現返回FALSE? 我可能錯過了一些東西,因爲我看不出爲什麼CodeIgniter不處理這個問題。

回答

1

我同意wesley murch的選擇,但我認爲爲單個功能創建整個班級並不是很好的做法。我的意見是使用助手。你可以試試這個:

在助手文件:

function get_db_data($result) 
{ 
    return ($result->num_rows() > 0) ? $result->result_array() : false; 
} 

你可以調用這個函數中的任何模型與

$this->load->helper('helper_file_name'); 
$dbData = get_db_data(result_object); 
2

構建快捷方式的方式並不多。即使是manual建議檢查結果:

如果運行可能不會產生結果的查詢,建議您先測試結果:

$query = $this->db->query("YOUR QUERY"); 
if ($query->num_rows() > 0) 
{ 
    // found results 
} 

你總是可以使用一個類擴展:

class MY_Model extends CI_Model { 

    protected function _get_row($result) 
    { 
     return $result->num_rows() ? $result->row() : FALSE; 
    } 

} 

用法在一個模型:

function get_user_data($user_id) 
{ 
    $user_data = $this->db->from('users')->where('id', $user_id)->get(); 
    return $this->_get_row($user_data); 
} 

您只需要extends MY_Model即可訪問該功能的型號。

另一種選擇是返回$this->db->get()的結果,並在控制器中執行檢查(您可能必須執行此操作)。