codeigniter4 / codeigniter4/CodeIgniter4
How do you use `object` cast handler for Entity?
- Langage dominant
- PHP
- Étoiles
- 6k
- Forks
- 2k
- Merge moyen
- 1 j 11 h
- PR mergées (30 j)
- 73
Description
https://codeigniter4.github.io/CodeIgniter4/models/entities.html#property-casting
The `object` handler seems to expect the property to be set to an array.
https://github.com/codeigniter4/CodeIgniter4/blob/0cd39937d7a8dbd8074237596024adce0fe3c2af/system/Entity/Cast/ObjectCast.php#L22-L25
https://github.com/codeigniter4/CodeIgniter4/blob/0cd39937d7a8dbd8074237596024adce0fe3c2af/tests/system/Entity/EntityTest.php#L439-L449
However, when setting an array, we cannot save that Entity to the database.
```php
$entity = new class () extends Entity {
protected $casts = [
'id' => 'int',
'active' => 'int-bool',
'memo' => 'object', // Use `object` handler
];
};
$model = new class () extends Model {
protected $table = 'users';
protected $allowedFields = [
'username', 'active', 'memo',
];
protected $useTimestamps = true;
};
$entity->fill(['username' => 'johnsmith', 'active' => false, 'memo' => ['foo', 'bar']]);
$model->save($entity); // CodeIgniter\Database\Exceptions\DatabaseException : Operand should contain 1 column(s)
```
How is this handler used in the first place?
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez par la documentation sur le property casting, puis lisez system/Entity/Cast/ObjectCast.php et les cas référencés de EntityTest.php. Reproduisez l’exemple qui enregistre une Entity avec un object cast et déterminez le comportement attendu ; le travail est terminé lorsque l’utilisation du handler et l’interaction avec la base de données sont couvertes par un test clair ou une mise à jour de la documentation.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- php
- Domaine
- backend, database
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100