Страное в ColumnSchema при коннекте через OCI

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
kar-slo
Сообщения: 7
Зарегистрирован: 2019.06.04, 02:09

Страное в ColumnSchema при коннекте через OCI

Сообщение kar-slo » 2019.06.04, 02:20

Странное происходит в этом методе:

Код: Выделить всё

 protected function typecast($value)
    {
        if ($value === ''
            && !in_array(
                $this->type,
                [
                    Schema::TYPE_TEXT,
                    Schema::TYPE_STRING,
                    Schema::TYPE_BINARY,
                    Schema::TYPE_CHAR
                ],
                true)
        ) {
            return null;
        }

        if ($value === null
            || gettype($value) === $this->phpType
            || $value instanceof ExpressionInterface
            || $value instanceof Query
        ) {
            return $value;
        }

        if (is_array($value)
            && count($value) === 2
            && isset($value[1])
            && in_array($value[1], $this->getPdoParamTypes(), true)
        ) {
            return new PdoValue($value[0], $value[1]);
        }

        switch ($this->phpType) {
            case 'resource':
            case 'string':
                if (is_resource($value)) {
                    return $value;
                }
                if (is_float($value)) {
                    // ensure type cast always has . as decimal separator in all locales
                    return StringHelper::floatToString($value);
                }
				return is_resource($value) ? $value : (string) $value->load();//oracle clob need this
            case 'integer':
                return (int) $value;
            case 'boolean':
                // treating a 0 bit value as false too
                // https://github.com/yiisoft/yii2/issues/9006
                return (bool) $value && $value !== "\0";
            case 'double':
                return (float) $value;
        }

        return $value;
    }
При значении int срабатывает

Код: Выделить всё

  case 'resource':
            case 'string':
и далее выходит ошибка на

Код: Выделить всё

return is_resource($value) ? $value : (string) $value->load();//oracle clob need this
а именно, что от int пытается сделаться $value->load();

помогает костыль:

Код: Выделить всё

switch ($this->phpType) {
            case 'resource':
            case 'string':
                if (is_resource($value)) {
                    return $value;
                }
                //Костыль
                if (is_int($value)) {
                	return $value;
				}
                if (is_float($value)) {
                    // ensure type cast always has . as decimal separator in all locales
                    return StringHelper::floatToString($value);
                }
				return is_resource($value) ? $value : (string) $value->load();//oracle clob need this
            case 'integer':
                return (int) $value;
            case 'boolean':
                // treating a 0 bit value as false too
                // https://github.com/yiisoft/yii2/issues/9006
                return (bool) $value && $value !== "\0";
            case 'double':
                return (float) $value;
        }
Но что-то переопределять класс из-за этого совсем не хочется. Может быть где-то что-то донастроить для OCI?

Ответить