CodeIgniter:如果Active Record无法找到任何数据,则返回FALSE

时间:2012-07-13 21:59:48

标签: php codeigniter activerecord

使用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还没有处理它。

2 个答案:

答案 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);