atk4\data\Persistence_SQL::_typecastSaveField PHP Method

_typecastSaveField() public method

This is the actual field typecasting, which you can override in your persistence to implement necessary typecasting.
public _typecastSaveField ( Field $f, mixed $value ) : mixed
$f Field
$value mixed
return mixed
    public function _typecastSaveField(Field $f, $value)
    {
        // work only on copied value not real one !!!
        $v = is_object($value) ? clone $value : $value;
        switch ($f->type) {
            case 'boolean':
                // if enum is not set, then simply cast value to integer
                if (!isset($f->enum) || !$f->enum) {
                    $v = (int) $v;
                    break;
                }
                // if enum is set, first lets see if it matches one of those precisely
                if ($v === $f->enum[1]) {
                    $v = true;
                } elseif ($v === $f->enum[0]) {
                    $v = false;
                }
                // finally, convert into appropriate value
                $v = $v ? $f->enum[1] : $f->enum[0];
                break;
            case 'date':
            case 'datetime':
            case 'time':
                $dt_class = isset($f->dateTimeClass) ? $f->dateTimeClass : 'DateTime';
                $tz_class = isset($f->dateTimeZoneClass) ? $f->dateTimeZoneClass : 'DateTimeZone';
                if ($v instanceof $dt_class) {
                    $format = ['date' => 'Y-m-d', 'datetime' => 'Y-m-d H:i:s', 'time' => 'H:i:s'];
                    $format = $f->persist_format ?: $format[$f->type];
                    // datetime only - set to persisting timezone
                    if ($f->type == 'datetime' && isset($f->persist_timezone)) {
                        $v->setTimezone(new $tz_class($f->persist_timezone));
                    }
                    $v = $v->format($format);
                }
                break;
            case 'array':
            case 'object':
                // don't encode if we already use some kind of serialization
                $v = $f->serialize ? $v : json_encode($v);
                break;
        }
        return $v;
    }