使用CodeIgniter,我在从数据库收集数据的所有模型中找到以下代码:
// .. 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还没有处理它。
答案 0 :(得分: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()
的结果,并在您的控制器中进行检查(无论如何您可能必须这样做)。
答案 1 :(得分: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);