[Model] Upsert problem with data validation, allowed fields, dates defined
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
Piste de recherche
Reproduisez le comportement avec le TestModel présenté, son appel à upsert et la configuration MySQL, puis suivez la manière dont upsert gère la validation, les champs autorisés, les suppressions logiques et les horodatages. C'est terminé lorsque les données invalides produisent des erreurs de validation avant la requête, que les champs non autorisés sont exclus et que le SQL généré correspond à la sortie attendue.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
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
- Langage dominant
- PHP
- Étoiles
- 6k
- Forks
- 2k
- Merge moyen
- 1 j 22 h
- PR mergées (30 j)
- 59
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de codeigniter4/CodeIgniter4
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
codeigniter4/CodeIgniter4#10616 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
codeigniter4/CodeIgniter4#10618 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 62/100
codeigniter4/CodeIgniter4#10617 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
codeigniter4/CodeIgniter4#10615 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
codeigniter4/CodeIgniter4#10589 · 3 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de codeigniter4/CodeIgniter4
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 2 jours
-
b:1.9 t:enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
Les mainteneurs répondent en général sous 3 jours
-
backend bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100