Open
Description
PHP Version
7.4
CodeIgniter4 Version
4.3.2
CodeIgniter4 Installation Method
Composer (as dependency to an existing project)
Which operating systems have you tested for this bug?
Windows, Linux
Which server did you use?
apache
Database
MySQL (ver. 8.0.28)
What happened?
Upsert does not work correctly with the model.
Allowed fields, validation rules, dates (created_at, updated_at) are defined within the model, this does not apply to the query.
The model should throw validation errors first!
Steps to Reproduce
class TestModel extends BaseModel
{
protected $table = 'table';
protected $allowedFields = [
'item_id', 'item_quantity'
];
protected $validationRules = [
'item_id' => 'required|is_natural_no_zero',
'item_quantity' => 'required|numeric',
];
protected $useSoftDeletes = true;
protected $protectFields = true;
protected $useTimestamps = true;
}
$model = new TestModel();
$model->upsert([
'item_id' => "string data", //validation is not correct
'item_quantity' => 99, //everything ok
'col1' => "string data", //not in allowed fields
]);
//check validation errors
$model->errors();
$model->db->getLastQuery()->getQuery();
Expected Output
INSERT INTO `table` (`item_quantity`, `created_at`, `updated_at`)
VALUES (99, unix_timestamp, unix_timestamp)
ON DUPLICATE KEY UPDATE
`table`.`item_quantity` = VALUES(`item_quantity`),
`table`.`updated_at` = VALUES(`updated_at`)
Anything else?
No response