CodeIgniter4 db-> save () метод - PullRequest
       27

CodeIgniter4 db-> save () метод

0 голосов
/ 02 августа 2020

Я делаю несколько попыток в 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;
    }
}

1 Ответ

0 голосов
/ 10 августа 2020

спасибо за помощь, проблема была в конфигурации порта БД, по умолчанию codeigniter приводит его как 3306, а в wampServer он используется MariaDB, я просто меняю его на 3308 (MySqlDB), и он отлично работает.

...