codeigniter update db with custom_result_object()

时间:2017-03-11 12:06:54

标签: php codeigniter codeigniter-3

我得到了一个codeigniter custom_result_object:

$user = $this->CI->db->get_where('users', array('email' => $email), 1)->custom_row_object(0,'entities\User');

一切都很好。我可以用我的二传手更新值。

在我要保存之前,我用以下方法检查我的值:

die(print_r($user));

且值正确。

我把我的对象放在我的更新方法中。

$this->CI->db->update('users', $user, "id = ".$user->getId());

但数据库没有更新。我错过了什么吗?

THX!

编辑:

因此,通过使用CI本机db-method,我可以使用:

public function save($user)
    {
        if($user->getId() == NULL){
            $this->CI->db->insert('users', $user);
        }else{
            $this->CI->db->update('users', $user, "id = ".$user->getId());
        }
    }

编辑2: 经过一些检查后,我可以看到它没有设置受保护的变量。 CI能够通过getter和setter获取对象,但无法保存回DB?

1 个答案:

答案 0 :(得分:2)

 public function saveData($tbl,$data,$update = false,$previewStr = false){

    $set_str = "NO_QUOTES()";

    if(isset($data[$set_str])){
        foreach($data[$set_str] as $set_key => $set_value){
            $this->db->set($set_key, $set_value, FALSE);
        }
        unset($data[$set_str]);
    }


    if(isset($update[$set_str])){
        foreach($update[$set_str] as $whr_key => $whr_value){
            $this->db->where($whr_key." ".$whr_value,NULL,false);
        }
        unset($update[$set_str]);
        if(is_array($update) and count($update) <= 0){
            $update = true;
        }
    }

    if($update == false){
        $this->db->insert($tbl, $data);

        if($previewStr){
            return $this->db->last_query();
        }else{
            return $this->db->insert_id();
        }
    }else{
        $result = NULL;
        if(!is_array($update)){
            if(is_array($data) and count($data) > 0){
                foreach($data as $field => $value){
                    $this->db->set($field, $value);
                }
            }
            $result = $this->db->update($tbl);
        }else{
            $result = $this->db->update($tbl, $data,$update);
        }

        if($previewStr){
            return $this->db->last_query();

        }else{
            return $result;
        }
    }
}

public function delData($tbl = false,$where = array()){
    if($tbl !== false){
        return $this->db->delete($tbl, $where);
    }else{
        return false;
    }
}


public function simpleQuery($query,$return_array = false,$return_single = false)
 {
    $ac = $this->db->query($query);
    if($return_array === false){
        return $ac;
    }else{
        if($return_single === false){
            return $ac->result_array();
        }else{
            return $ac->row_array();
        }
    }
}

在你的模型中使用上面的代码,你给我如何更新它使用你的控制器中的下面的代码你可以通过上面的代码插入更新和删除

$result=$this->Products_model->saveData("customer",array("customer_name"=>$name),array("cust_id"));