Я делаю несколько попыток в CI4, и я застрял при сохранении данных в базе данных.
Я пытаюсь, как показано ниже:
use App\Models\UserModel;
...
$model = new UserModel();
$newUser = [
'firstname' => $this->request->getVar('firstname'),
'lastname' => $this->request->getVar('lastname'),
'email' => $this->request->getVar('email'),
'password' => $this->request->getVar('password')
];
$model->save( $newUser );
Показанная ошибка: Количество столбцов не соответствует количеству значений в строке 1
, и если мы посмотрим на аргументы запроса, он генерирует запрос без параметров:
$query INSERT INTO `users` () VALUES ('')
Таблица пользователей:
CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT,
`firstname` varchar(60) COLLATE utf8mb4_general_ci NOT NULL,
`lastname` varchar(60) COLLATE utf8mb4_general_ci NOT NULL,
`email` varchar(60) COLLATE utf8mb4_general_ci NOT NULL,
`password` varchar(60) COLLATE utf8mb4_general_ci NOT NULL,
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
Модель пользователя
<?php
namespace App\Models;
use CodeIgniter\Model;
class UserModel extends Model
{
protected $table = 'users';
protected $primaryKey = 'id';
protected $returnType = 'array';
protected $useSoftDeletes = true;
protected $allowedFields = ['firstname', 'lastname', 'email', 'password', 'updated_at'];
protected $useTimestamps = false;
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
protected $deletedField = '';
protected $validationRules = [];
protected $validationMessages = [];
protected $skipValidation = false;
protected $beforeInsert = ['beforeInsert'];
protected $beforeUpdate = ['beforeUpdate'];
protected function beforeInsert( array $data )
{
$this->_hashPassword( $data );
}
protected function beforeUpdate( array $data )
{
$this->_hashPassword( $data );
}
protected function _hashPassword( array $data )
{
if( isset($data['data']['password']))
$data['data']['password'] = password_hash( $data['data']['password'] , PASSWORD_DEFAULT);
return $data;
}
}