Codeigniter4 показывает, что вы должны использовать метод «set» при запуске запроса на обновление, даже если я использовал метод «set»

#php #codeigniter-4

#php #codeigniter-4

Вопрос:

Мой запрос выглядит следующим образом

 function reset_attempt($usr_id, $attempt = 0)
{
    if (!$usr_id)
        exit("No user found");
    $builder = $this->table($this->table);
    $builder->set('usr_attempt', $attempt);
    $builder->set('usr_lock', NULL);
    $builder->where("usr_attempt > ", $this->max_attempt);
    $builder->where($this->primaryKey, $usr_id);
    echo "<br> Query: " . $builder->getCompiledUpdate(false);
    exit();
    // $builder->update($this->table);
}
 

Затем я получаю следующее сообщение об ошибке

CodeIgniterDatabaseExceptionsDatabaseException #8

You must use the "set" method to update an entry.

Комментарии:

1. Все в порядке, работает. Я использовал эту форму в других запросах

2. Здесь $this->table свойство текущего класса и $this->table() метод унаследованного класса. Нажмите здесь для получения дополнительной информации

Ответ №1:

Сработало следующее

 class UserModel extends Model
{
   // Property used to connect with database
   protected $db;

   
   function __construct()
   {
       // Connedt with database
       $this->db = ConfigDatabase::connect();
   }

   function reset_attempt($usr_id, $attempt = 0)
   {
        if (!$usr_id)
            exit("No user found");

        // Call method table() with $this->db
        $builder = $this->db->table($this->table);
        $builder->set('usr_attempt', $attempt);
        $builder->set('usr_lock', NULL);
        $builder->where("usr_attempt > ", $this->max_attempt);
        $builder->where($this->primaryKey, $usr_id);
        echo "<br> Query: " . $builder->getCompiledUpdate(false);
        exit();
    }
}
 

Вывод

 Query: UPDATE `users` SET `usr_attempt` = '0', `usr_lock` = NULL WHERE `usr_attempt` > 2 AND `usr_id` = '1'