codeigniter4 / codeigniter4/CodeIgniter4

[Model] Upsert problem with data validation, allowed fields, dates defined

Abierto
#7,286 6 comentarios 0 reacciones 0 asignados Ver en GitHub
enhancement
Lenguaje dominante
PHP
Estrellas
6k
Forks
2k
Merge medio
1 d 11 h
PR fusionados (30 d)
73

Descripción

### 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

```php

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

```sql
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_

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.