CodeIgniter中stdClass对象无法转为字符串错误求助
解决Error: Object of class stdClass could not be converted to string问题
嘿,我来帮你搞定这个报错!这个问题的根源很明确:你从getCompanyName方法拿到的不是一个字符串,而是一个stdClass对象(从你print_r的输出也能看到:stdClass Object ( [company_name] => ASGB )),但getStaffDetails方法需要的是字符串类型的公司名称,所以当你把对象传入查询条件时,CodeIgniter尝试把对象转成字符串就触发了这个错误。
具体修改方案
有两种简单的解决方式,推荐第一种(在模型层处理数据更规范):
方案1:修改Staff_model的getCompanyName方法,直接返回字符串
把原来返回整个对象的逻辑,改成返回对象里的company_name属性值,还可以加个空值判断避免报错:
function getCompanyName($user_id) { $result = $this->db->select('company_name') ->from('user_login') ->where(array('id' => $user_id,'delete_flag'=>0)) ->get() ->row(); // 检查是否获取到有效数据,避免空对象调用属性报错 return $result ? $result->company_name : ''; }
方案2:在控制器里提取对象的属性值
如果你不想改模型,也可以在控制器里把对象转成字符串再传递:
$company_name_obj = $this->staff_model->getCompanyName($user_id); $company_name = $company_name_obj->company_name; // 提取字符串值 $data['staff'] = $this->staff_model->getStaffDetails($company_name);
为什么会出现这个错误?
CodeIgniter的row()方法返回的是一个封装了查询结果的对象,每个数据库字段对应对象的一个属性。你直接把这个对象传给getStaffDetails的$company_name参数,在执行get_where时,框架会尝试把这个对象转成字符串用于SQL查询,而PHP无法直接将stdClass对象转为字符串,所以就抛出了这个错误。
内容的提问来源于stack exchange,提问作者Roxana Slj
相关产品推荐
相关产品推荐

