Yii make active record在获取字段时应用MySQL函数?

时间:2013-09-11 16:29:32

标签: php mysql sql yii

我有一个timestamp类型的MySQL列,名为updated。我希望Yii默认使用Active Record模型中的SELECT UNIX_TIMESTAMP(status_updated)来获取它。所以我可以这样做:

$timestamp_as_integer = MyModel::model()->findByPk(1)->updated;

这很容易吗?现在我正在解析MySQL为所有日期时间列类型返回的YYYY-MM-DD hh:mm:ss格式以获取整数时间戳,但是如果我可以强制数据库为我做这件事我是好奇的吗?

3 个答案:

答案 0 :(得分:1)

在模型中执行转换:

protected function afterFind() {
    parent::afterFind();

    $this->status_updated = strtotime($this->status_updated);
}

现在,在对模型执行“查找”后,属性status_updated将自动以int时间戳格式显示。

答案 1 :(得分:1)

另一种方法是编写一个getter:

public function getUpdatedTimestamp()
{
    return strtotime($this->updated);
}

好消息是,您现在可以$model->updatedTimestamp访问它,并且仍然在$model->updated中拥有原始数据库值。

答案 2 :(得分:0)

脱离我的头顶,但这应该有用。

$timestamp_as_integer = MyModel::model()->findByPk(1, array(
    'select' => array(new CDbExpression('UNIX_TIMESTAMP(updated) as updated'))
))->updated;