0 关注者

类 yii\db\ColumnSchema

继承yii\db\ColumnSchema » yii\base\BaseObject
实现yii\base\Configurable
子类yii\db\mssql\ColumnSchema, yii\db\mysql\ColumnSchema, yii\db\pgsql\ColumnSchema
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/db/ColumnSchema.php

ColumnSchema 类描述数据库表中列的元数据。

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$allowNull boolean 此列是否可以为空。 yii\db\ColumnSchema
$autoIncrement boolean 此列是否为自动递增 yii\db\ColumnSchema
$comment string 此列的注释。 yii\db\ColumnSchema
$dbType string 此列的数据库类型。 yii\db\ColumnSchema
$defaultValue mixed 此列的默认值 yii\db\ColumnSchema
$enumValues array 枚举值。 yii\db\ColumnSchema
$isPrimaryKey boolean 此列是否为主键 yii\db\ColumnSchema
$name string 此列的名称(不带引号)。 yii\db\ColumnSchema
$phpType string 此列的 PHP 类型。 yii\db\ColumnSchema
$precision integer 如果列数据是数字,则其精度。 yii\db\ColumnSchema
$scale integer 如果列数据是数字,则其比例。 yii\db\ColumnSchema
$size integer 列的显示大小。 yii\db\ColumnSchema
$type string 此列的抽象类型。 yii\db\ColumnSchema
$unsigned boolean 此列是否无符号。 yii\db\ColumnSchema

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\BaseObject
__construct() 构造函数。 yii\base\BaseObject
__get() 返回对象属性的值。 yii\base\BaseObject
__isset() 检查属性是否已设置,即已定义且不为空。 yii\base\BaseObject
__set() 设置对象属性的值。 yii\base\BaseObject
__unset() 将对象属性设置为 null。 yii\base\BaseObject
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\BaseObject
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\BaseObject
className() 返回此类的完全限定名称。 yii\base\BaseObject
dbTypecast() 根据 $type$dbType 转换输入值,以便在数据库查询中使用。 yii\db\ColumnSchema
hasMethod() 返回一个值,指示是否已定义方法。 yii\base\BaseObject
hasProperty() 返回一个值,指示是否已定义属性。 yii\base\BaseObject
init() 初始化对象。 yii\base\BaseObject
phpTypecast() 从数据库中检索后,根据 $phpType 转换输入值。 yii\db\ColumnSchema

受保护方法

隐藏继承的方法

方法 描述 定义于
typecast() 从数据库中检索后,根据 $phpType 转换输入值。 yii\db\ColumnSchema

属性详细信息

隐藏继承的属性

$allowNull 公共属性

此列是否可以为空。

public boolean $allowNull null
$autoIncrement 公共属性

此列是否为自动递增

public boolean $autoIncrement false
$comment 公共属性

此列的注释。并非所有 DBMS 都支持此功能。

public string $comment null
$dbType 公共属性

此列的数据库类型。可能的数据库类型会因 DBMS 类型而异。

public string $dbType null
$defaultValue 公共属性

此列的默认值

public mixed $defaultValue null
$enumValues 公共属性

枚举值。仅当列被声明为枚举类型时才设置此值。

public array $enumValues null
$isPrimaryKey 公共属性

此列是否为主键

public boolean $isPrimaryKey null
$name 公共属性

此列的名称(不带引号)。

public string $name null
$phpType 公共属性

此列的 PHP 类型。可能的 PHP 类型包括:stringbooleanintegerdoublearray

public string $phpType null
$precision 公共属性

如果列数据是数字,则其精度。

public integer $precision null
$scale 公共属性

如果列数据是数字,则其比例。

public integer $scale null
$size 公共属性

列的显示大小。

public integer $size null
$type 公共属性

此列的抽象类型。可能的抽象类型包括:char、string、text、boolean、smallint、integer、bigint、float、decimal、datetime、timestamp、time、date、binary 和 money。

public string $type null
$unsigned 公共属性

此列是否无符号。这只有在 $typesmallintintegerbigint 时才有意义。

public boolean $unsigned null

方法详情

隐藏继承的方法

__call() 公共方法

定义于: yii\base\BaseObject::__call()

调用不是类方法的命名方法。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时将被隐式调用。

public mixed __call ( $name, $params )
$name string

方法名

$params array

方法参数

返回值 mixed

方法返回值

抛出 yii\base\UnknownMethodException

调用未知方法时

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__construct() 公共方法

定义于: yii\base\BaseObject::__construct()

构造函数。

默认实现做了两件事

  • 使用给定的配置 $config 初始化对象。
  • 调用 init()

如果此方法在子类中被重写,建议

  • 构造函数的最后一个参数是一个配置数组,比如这里的 $config
  • 在构造函数的末尾调用父类实现。
public void __construct ( $config = [] )
$config array

将用于初始化对象属性的键值对

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() 公共方法

定义于: yii\base\BaseObject::__get()

返回对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $value = $object->property; 时将被隐式调用。

另见 __set()

public mixed __get ( $name )
$name string

属性名

返回值 mixed

属性值

抛出 yii\base\UnknownPropertyException

如果未定义属性

抛出 yii\base\InvalidCallException

如果属性为只写

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() 公共方法

定义于: yii\base\BaseObject::__isset()

检查属性是否已设置,即已定义且不为空。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 isset($object->property) 时将被隐式调用。

注意,如果属性未定义,将返回 false。

另见 https://php.ac.cn/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

属性名称或事件名称

返回值 boolean

命名的属性是否已设置(非空)。

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() 公共方法

定义于: yii\base\BaseObject::__set()

设置对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,将在执行 $object->property = $value; 时隐式调用。

另请参见 __get().

public void __set ( $name, $value )
$name string

属性名称或事件名称

$value mixed

属性值

抛出 yii\base\UnknownPropertyException

如果未定义属性

抛出 yii\base\InvalidCallException

如果属性是只读的

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() 公共方法

定义于: yii\base\BaseObject::__unset()

将对象属性设置为 null。

不要直接调用此方法,因为它是一个 PHP 魔术方法,将在执行 unset($object->property) 时隐式调用。

请注意,如果属性未定义,此方法将不执行任何操作。如果属性是只读的,它将抛出异常。

另请参见 https://php.ac.cn/manual/en/function.unset.php.

public void __unset ( $name )
$name string

属性名

抛出 yii\base\InvalidCallException

如果属性是只读的。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
canGetProperty() 公共方法

定义于: yii\base\BaseObject::canGetProperty()

返回一个值,指示是否可以读取属性。

属性可读如果

  • 该类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称匹配的成员变量(当 $checkVars 为真时);

另请参见 canSetProperty().

public boolean canGetProperty ( $name, $checkVars true )
$name string

属性名

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

属性是否可读

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() 公共方法

定义于: yii\base\BaseObject::canSetProperty()

返回一个值,指示是否可以设置属性。

属性可写如果

  • 该类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称匹配的成员变量(当 $checkVars 为真时);

另请参见 canGetProperty().

public boolean canSetProperty ( $name, $checkVars true )
$name string

属性名

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

属性是否可写

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
className() 公共静态方法
自 2.0.14 版起已弃用。在 PHP >=5.5 上,使用 ::class 代替。

定义于: yii\base\BaseObject::className()

返回此类的完全限定名称。

public static string className ( )
返回值 string

此类的完全限定名称。

                public static function className()
{
    return get_called_class();
}

            
dbTypecast() 公共方法

根据 $type$dbType 转换输入值,以便在数据库查询中使用。

如果值为 null 或 yii\db\Expression,则不会进行转换。

public mixed dbTypecast ( $value )
$value mixed

输入值

返回值 mixed

转换后的值。这也可以是一个数组,包含值作为第一个元素,PDO 类型作为第二个元素。

                public function dbTypecast($value)
{
    // the default implementation does the same as casting for PHP, but it should be possible
    // to override this with annotation of explicit PDO type.
    return $this->typecast($value);
}

            
hasMethod() 公共方法

定义于: yii\base\BaseObject::hasMethod()

返回一个值,指示是否已定义方法。

默认实现是调用 php 函数 method_exists()。当您实现 php 魔术方法 __call() 时,您可能会覆盖此方法。

public boolean hasMethod ( $name )
$name string

方法名

返回值 boolean

方法是否已定义

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() 公共方法

定义于: yii\base\BaseObject::hasProperty()

返回一个值,指示是否已定义属性。

属性定义如果

  • 该类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称匹配的成员变量(当 $checkVars 为真时);

另请参见

public boolean hasProperty ( $name, $checkVars true )
$name string

属性名

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

属性是否已定义

                public function hasProperty($name, $checkVars = true)
{
    return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}

            
init() 公共方法

定义于: yii\base\BaseObject::init()

初始化对象。

此方法在构造函数结束时调用,在对象使用给定配置初始化后调用。

public void init ( )

                public function init()
{
}

            
phpTypecast() 公共方法

从数据库中检索后,根据 $phpType 转换输入值。

如果值为 null 或 yii\db\Expression,则不会进行转换。

public mixed phpTypecast ( $value )
$value mixed

输入值

返回值 mixed

转换后的值

                public function phpTypecast($value)
{
    return $this->typecast($value);
}

            
typecast() 受保护的方法 (自 2.0.3 版起可用)

从数据库中检索后,根据 $phpType 转换输入值。

如果值为 null 或 yii\db\Expression,则不会进行转换。

protected mixed typecast ( $value )
$value mixed

输入值

返回值 mixed

转换后的值

                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);
            }
            if (
                is_numeric($value)
                && ColumnSchemaBuilder::CATEGORY_NUMERIC === ColumnSchemaBuilder::$typeCategoryMap[$this->type]
            ) {
                // https://github.com/yiisoft/yii2/issues/14663
                return $value;
            }
            if (PHP_VERSION_ID >= 80100 && is_object($value) && $value instanceof \BackedEnum) {
                return (string) $value->value;
            }
            return (string) $value;
        case 'integer':
            if (PHP_VERSION_ID >= 80100 && is_object($value) && $value instanceof \BackedEnum) {
                return (int) $value->value;
            }
            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" && strtolower($value) !== 'false';
        case 'double':
            return (float) $value;
    }
    return $value;
}