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 类插入

使用 CodeIgniter Active Record 语句

PHP Codeigniter:显示Active Record的SQL查询

如何在 codeigniter 中将 class="active" 设置为导航菜单?