codeigniter4 / codeigniter4/CodeIgniter4

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

Aberta
#7,286 6 comentários 0 reações 0 responsáveis Ver no GitHub
enhancement
Linguagem predominante
PHP
Estrelas
6k
Forks
2k
Merge médio
1d 11h
PRs com merge (30d)
73

Descrição

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

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

Reproduza o comportamento com o TestModel mostrado, sua chamada de upsert e a configuração do MySQL; em seguida, rastreie como upsert trata a validação, os campos permitidos, as exclusões lógicas e os timestamps. Está concluído quando dados inválidos produzem erros de validação antes da consulta, campos não permitidos são excluídos e o SQL gerado corresponde à saída esperada.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
mysql, php
Domínio
backend, databases
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.