CodeIgniter:在bool上调用成员函数row()

时间:2019-08-11 22:08:51

标签: php codeigniter

由于我已从CodeIgniter 2.2.6升级到3.xx,所以我有一个无法解决的问题。

模型

function get_the_continue_id_pregunta_from_level($level_type, $level)
{
    $this->db->select();
    $this->db->from('preguntas');
    $this->db->where($level_type, $level);
    $this->db->where('language', 2);
    $this->db->where("`id` NOT IN (SELECT `id_pregunta` FROM `user_as_preguntas` WHERE user_id =" . $this->session->userdata('id') .  "  )", NULL, FALSE);
    $this->db->order_by("id", "ASC"); 
    $this->db->limit(1);
    $q = $this->db->get();
    if(!$q->num_rows > 0) {
        $q = FALSE;
    }

    return $q;  
}

控制器

$g2 = $this->Qcm->get_the_continue_id_pregunta_from_level('level_1',$row->level_1);
$g2 = $g2->row()->id;

错误

  

在bool上调用成员函数row()

2 个答案:

答案 0 :(得分:0)

这可能是subquery的问题,您可以像下面这样尝试get_compiled_select

function get_the_continue_id_pregunta_from_level($level_type, $level)
    {

        $this->db->select('id_pregunta');
        $this->db->from('user_as_preguntas');
        $this->db->where('user_id', $this->session->userdata('id'));
        $where_clause = $this->db->get_compiled_select();

        $this->db->select();
        $this->db->from('preguntas');
        $this->db->where($level_type, $level);
        $this->db->where('language', 2);
        $this->db->where("`id` NOT IN ($where_clause)", NULL, FALSE);
        $this->db->order_by("id", "ASC"); 
        $this->db->limit(1);
        $q = $this->db->get();
        if(!$q->num_rows > 0) {
            $q = FALSE;
        }

        return $q;  
    }

答案 1 :(得分:0)

有2个问题:

第一:您需要处理查询没有任何结果的情况:在控制器中编写类似以下内容的

$g2 = $this->Qcm->get_the_continue_id_pregunta_from_level('level_1',$row->level_1);

if($g2){
  $g2 = $g2->row()->id;
}else{
  echo 'no records found'; 
}

现在您不再将->row()->id设置为false了,不再有错误消息,因此可以处理该错误。

第二:由于查询在迁移之前已经生效,因此您需要阅读文档并按照升级说明进行操作。您很可能在数据库配置文件中错过了将$active_record = TRUE;更改为$query_builder = TRUE;

会话库也可能存在问题,早期3.x版本中记录了一些问题,因此请确保升级到最新版本:3.1.10