PHP Version
8.4
CodeIgniter4 Version
4.7.4
CodeIgniter4 Installation Method
Composer (as dependency to an existing project)
Which operating systems have you tested for this bug?
Windows
Which server did you use?
cli-server (PHP built-in webserver)
Environment
development
Database
MySQL 8.4.9
What happened?
When setting the database connection in app\Config\Database.php, I am using the following dateFormat definition to get millisecond precision in my dates:
'dateFormat' => [
'date' => 'Y-m-d',
'datetime' => 'Y-m-d H:i:s.v',
'time' => 'H:i:s',
],
My model then configures the following for timestamps:
protected $useTimestamps = true;
protected $dateFormat = 'datetime';
protected $createdField = 'created_at';
After inserting an entry the table, the created_at column does not include the milliseconds. For example, the column has the value 2026-09-11 10:17:35 however because the column definition in MySQL is timestamp(6) the column should have the value 2026-09-11 10:17:35.509000.
Steps to Reproduce
Set the datetime mask as above and the model variables as above and insert a value into your table.
Expected Output
I expected the created_at column to include the milliseconds.
Anything else?
I have resolved this problem by overriding the setDate() function in the BaseModel as follows.
My model class is defined as:
class TransactionHistoryModel extends \App\Models\BaseModel {
...
}
I have then created my own BaseModel with the setDate override defined as:
namespace App\Models;
class BaseModel extends Model {
/**
* Sets the timestamp or current timestamp if null value is passed.
*
* @param int|null $userDate An optional PHP timestamp to be converted
*
* @return int|string
*
* @throws ModelException
*/
protected function setDate(?int $userDate = null)
{
$currentDate = $userDate ? Time::createFromTimestamp($userDate) : Time::now();
return $this->timeToDate($currentDate);
}
}
This solution works.
PHP Version
8.4
CodeIgniter4 Version
4.7.4
CodeIgniter4 Installation Method
Composer (as dependency to an existing project)
Which operating systems have you tested for this bug?
Windows
Which server did you use?
cli-server (PHP built-in webserver)
Environment
development
Database
MySQL 8.4.9
What happened?
When setting the database connection in app\Config\Database.php, I am using the following dateFormat definition to get millisecond precision in my dates:
My model then configures the following for timestamps:
After inserting an entry the table, the
created_atcolumn does not include the milliseconds. For example, the column has the value 2026-09-11 10:17:35 however because the column definition in MySQL is timestamp(6) the column should have the value 2026-09-11 10:17:35.509000.Steps to Reproduce
Set the datetime mask as above and the model variables as above and insert a value into your table.
Expected Output
I expected the
created_atcolumn to include the milliseconds.Anything else?
I have resolved this problem by overriding the
setDate()function in the BaseModel as follows.My model class is defined as:
I have then created my own BaseModel with the setDate override defined as:
This solution works.