CodeIgniter:如果 Active Record 找不到任何数据,则返回 FALSE
Posted
技术标签:
【中文标题】CodeIgniter:如果 Active Record 找不到任何数据,则返回 FALSE【英文标题】:CodeIgniter: return FALSE if Active Record can't find any data 【发布时间】:2012-07-13 19:15:20 【问题描述】:使用 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 还没有处理这个问题。
【问题讨论】:
【参考方案1】:内置快捷方式的方式并不多。甚至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()
的结果,并在您的控制器中进行检查(无论如何您可能都必须这样做)。
【讨论】:
【参考方案2】:我同意 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);
【讨论】:
以上是关于CodeIgniter:如果 Active Record 找不到任何数据,则返回 FALSE的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter Active Record - 计算找到的总行数(MySQL)
CodeIgniter/PHP Active Record 不会增加整数
使用 CodeIgniter Active Record 语句