2012-07-13 74 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()的结果,并在控制器中执行检查(您可能必须执行此操作)。