3

使用 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 还没有处理这个问题。

4

2 回答 2

2

内置快捷方式的方式并不多。甚至手册也建议检查您的结果:

如果您运行的查询可能不会产生结果,建议您先测试结果:

$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(),然后在您的控制器中进行检查(无论如何您可能都必须这样做)。

于 2012-07-13T22:11:37.700 回答
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);
于 2012-07-14T08:40:56.583 回答