Страное в ColumnSchema при коннекте через OCI
Добавлено: 2019.06.04, 02:20
Странное происходит в этом методе:
При значении int срабатывает
и далее выходит ошибка на
а именно, что от int пытается сделаться $value->load();
помогает костыль:
Но что-то переопределять класс из-за этого совсем не хочется. Может быть где-то что-то донастроить для OCI?
Код: Выделить всё
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;
}
Код: Выделить всё
case 'resource':
case 'string':
Код: Выделить всё
return is_resource($value) ? $value : (string) $value->load();//oracle clob need this
помогает костыль:
Код: Выделить всё
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;
}