3.8 特殊字段处理

当获取和保存记录时,你可以让模型对某些字段做特殊处理。

[Note]Note

当模型检查数据库时,它会自动识别自增字段,所以自增自段不需要特殊验证。

3.8.1 创建时间戳

$_created_col属性表明:当某记录是第一次插入数据表中时,表中的某个字段自动由时间戳填充。默认情况下,这个字段名字是created,但是你可以用你喜欢的任何名字。如果该字段不存在或$_created_col属性为空,那么就不会发生特殊处理。

<?php
class Vendor_Model_Foo extends Vendor_Sql_Model
{
    public function _setup()
    {
        // use a column called "first_added" as the created timestamp column
        $this->_created_col = 'first_added';
    }
}

3.8.2 更新时间戳

$_updated_col属性表明:当数据表中某记录更新时,表中的某个字段自动由时间戳填充。默认情况下,这个字段名字是updated,但是你可以用你喜欢的任何名字。如果该字段不存在或$_updated_col属性为空,那么就不会发生特殊处理。

<?php
class Vendor_Model_Foo extends Vendor_Sql_Model
{
    public function _setup()
    {
        // use a column called "last_changed" as the updated timestamp column
        $this->_updated_col = 'last_changed';
    }
}

3.8.3 自动数列

$_sequence_cols属性表明:当数据表中一个或多个字段为空时,它们将被一个数列填充。$_sequence_cols属性的键是字段名,值是数列名。如果是单值形式,那么它即是字段名也是数列名。

<?php
class Vendor_Model_Foo extends Vendor_Sql_Model
{
    public function _setup()
    {
        // when "bar" is empty, popualate it with the next value
        // from the sequence "zim"
        $this->_sequence_cols['bar'] = 'zim';
        
        // when "dib" us empty, populate it with the next value
        // from the sequence also called "dib"
        $this->_sequence_cols[] = 'dib';
    }
}

3.8.4 PHP序列化

$_serialize_cols属性指定那些插入数据库之前和获取数据时需要被序列化(serialize())和反序列化(unserialize())的字段。这使你可以无缝地使用数组作为记录对象属性。

<?php
class Vendor_Model_Foo extends Vendor_Sql_Model
{
    public function _setup()
    {
        // the column 'user_prefs' should be serialized on save,
        // and unserialized on retrieval
        $this->_serialize_cols[] = 'user_prefs';
    }
}

3.8.5 XML 结构

$_xmlstruct_cols属性指明了这些字段:从数据库获取记录时需转化为Solar_Struct_Xml对象,保存记录时又需转回为XML格式。这使你可以无缝使用XML结构对象作为记录属性。

<?php
class Vendor_Model_Foo extends Vendor_Sql_Model
{
    public function _setup()
    {
        // the column 'xmldata' should be converted to a Solar_Struct_Xml
        // object on retrieval, and back to XML on save
        $this->_xmlstruct_cols[] = 'xmldata';
    }
}