phpcodeignitercodeigniter-4

Codeigniter - Error - There is no data to update


I was to update my database but I get the error, "no data to update". Here is my script;

I have created a simple toggle to up update the database. The toggle makes the user active (is_active=1) or inactive (is_active=0). The problem I am encountering is that although the object is change from 1 to 0 or 0 to 1, when I pass it to the model, it comes back with the error, "There is no data to update". The method is as follows;

namespace App\Controllers\Admin;

use App\Entities\User;

class Users extends \App\Controllers\BaseController
{
    private $model;
    
    public function __construct()
    {
        $this->model = new \App\Models\UserModel;
    }

    public function toggle_user_is_active($id)
    {
        $users = $this->model->where('id', $id)->first();  // get the record

    //If the current user is ACTIVE, then set it to DEACTIVE
    if ($users->is_active == 1) {
        $users->is_active = 0; 
        $this->model->save($users));  // gives an error, nothing to update
        return redirect()->to('/Admin/Users/index')
                         ->with('info', 'Success - User deactivated');
    } else {
        // if the current used is ACTIVE(1), change to INACTIVE(0)
        $users->is_active = 1; 
        $this->model->save($users); // same error as above
        return redirect()->to('/Admin/Users/index')
                         ->with('info', 'Success - User Activated');
    }
} // end method

The really strange thing is this is a copy of another method that works perfectly as follows;

namespace App\Controllers\Admin;

use App\Entities\CategoryEntity;
use App\Entities\PostEntity;

class Post extends \App\Controllers\BaseController
{
    private $model;
    
    public function __construct()
    {
        $this->model = new \App\Models\PostModel;
        $this->CategoryModel = new \App\Models\CategoryModel;
        $auth = new \App\Libraries\Authentication;
        $this->current_user = $auth->getCurrentUser();
    }

    public function toggle_post_is_published($post_id)
    {
        $post = $this->model->where('post_id', $post_id)->first();
        // if the current post is PUBLISHED, then set it to UNPUBLISHED
        if ($post->post_is_published == 1) {
            echo
            $post->post_is_published = 0;
            $this->model->save($post);
            return redirect()->to('/admin/post/post_index')
                             ->with('info', 'Success - Post unpublished');
        } else {
            // if the current post is UNPUBLISHED, then set it to PUBLISHED
            $post->post_is_published = 1;
            $this->model->save($post);
            return redirect()->to('/admin/post/post_index')
                             ->with('info', 'Success - Post published');
        }
    }
} // end class

Solution

  • I finally figured it out. In my UserModel I did not add 'is_active' to protected $allowedFields . I have now added 'is_active' to the allowedFields and it works.