Repository navigation
Bug: Entity::toRawArray() may return Time object #8302
Copy link
Copy link
Open
Labels
bugVerified issues on the current code behavior or pull requests that will fix themVerified issues on the current code behavior or pull requests that will fix them
Description
Activity
- addedbugVerified issues on the current code behavior or pull requests that will fix themVerified issues on the current code behavior or pull requests that will fix them
on Dec 7, 2023 After calling
find(), nothing changes, because attributes are just copied as strings. After the change,castAs()is applied.Yes, if we change the date and save the object,
toRawArray()returns theTimeobject.@kenjis got a question.
What should$originalcontain? Data from the table as primitive types or modified data aftercastAs()? This is misleading. If we select an object from the table, apply casting and$entity->syncOriginal(), nothing will change globally (the data is relatively old - date type changed toTime), but the entity will change$originalThe
$originalis only forhasChanged().
So it should contain the data for it.The current behavior:
public function index() { $users = new UserModel(); /** @var User $user */ $user = $users->find(1); $user->updated_at = '2023-12-12 12:12:12'; var_dump($user); }
/Users/kenji/work/codeigniter/official/CodeIgniter4/app/Controllers/Home.php:17: object(App\Entities\User)[89] protected 'datamap' => array (size=0) empty protected 'dates' => array (size=3) 0 => string 'created_at' (length=10) 1 => string 'updated_at' (length=10) 2 => string 'deleted_at' (length=10) protected 'casts' => array (size=0) empty protected 'castHandlers' => array (size=0) empty private array 'defaultCastHandlers' (CodeIgniter\Entity\Entity) => array (size=15) 'array' => string 'CodeIgniter\Entity\Cast\ArrayCast' (length=33) 'bool' => string 'CodeIgniter\Entity\Cast\BooleanCast' (length=35) 'boolean' => string 'CodeIgniter\Entity\Cast\BooleanCast' (length=35) 'csv' => string 'CodeIgniter\Entity\Cast\CSVCast' (length=31) 'datetime' => string 'CodeIgniter\Entity\Cast\DatetimeCast' (length=36) 'double' => string 'CodeIgniter\Entity\Cast\FloatCast' (length=33) 'float' => string 'CodeIgniter\Entity\Cast\FloatCast' (length=33) 'int' => string 'CodeIgniter\Entity\Cast\IntegerCast' (length=35) 'integer' => string 'CodeIgniter\Entity\Cast\IntegerCast' (length=35) 'int-bool' => string 'CodeIgniter\Entity\Cast\IntBoolCast' (length=35) 'json' => string 'CodeIgniter\Entity\Cast\JsonCast' (length=32) 'object' => string 'CodeIgniter\Entity\Cast\ObjectCast' (length=34) 'string' => string 'CodeIgniter\Entity\Cast\StringCast' (length=34) 'timestamp' => string 'CodeIgniter\Entity\Cast\TimestampCast' (length=37) 'uri' => string 'CodeIgniter\Entity\Cast\URICast' (length=31) protected 'attributes' => array (size=7) 'id' => string '1' (length=1) 'name' => string 'John Smith' (length=10) 'email' => string 'john@example.com' (length=16) 'country' => string 'US' (length=2) 'created_at' => string '2023-12-13 09:58:48' (length=19) 'updated_at' => object(CodeIgniter\I18n\Time)[88] protected 'timezone' => object(DateTimeZone)[90] ... protected 'locale' => string 'en' (length=2) protected 'toStringFormat' => string 'yyyy-MM-dd HH:mm:ss' (length=19) public 'date' => string '2023-12-12 12:12:12.000000' (length=26) public 'timezone_type' => int 3 public 'timezone' => string 'UTC' (length=3) 'deleted_at' => null protected 'original' => array (size=7) 'id' => string '1' (length=1) 'name' => string 'John Smith' (length=10) 'email' => string 'john@example.com' (length=16) 'country' => string 'US' (length=2) 'created_at' => string '2023-12-13 09:58:48' (length=19) 'updated_at' => string '2023-12-13 09:58:48' (length=19) 'deleted_at' => null private bool '_cast' (CodeIgniter\Entity\Entity) => boolean true- added 2 commits that reference this issue
on May 18, 2026 - added 7 commits that reference this issue
on Jul 9, 2026
Metadata
Metadata
Assignees
Labels
bugVerified issues on the current code behavior or pull requests that will fix themVerified issues on the current code behavior or pull requests that will fix them
PHP Version
8.1
CodeIgniter4 Version
4.4.3 and develop
CodeIgniter4 Installation Method
Git
Which operating systems have you tested for this bug?
macOS
Which server did you use?
cli-server (PHP built-in webserver)
Database
MySQL 8.0.34
What happened?
The following code returns Time object.
Steps to Reproduce
Expected Output
Returns string value
'2023-12-12 12:12:12'?Anything else?
No response