首页 文章

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

提问于
浏览
0

我有一个 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

    在模型中执行转换:

    protected function afterFind() {
        parent::afterFind();
    
        $this->status_updated = strtotime($this->status_updated);
    }
    

    现在,在模型上执行'find'后,属性 status_updated 将自动以 int 时间戳格式显示它 .

  • 1

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

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

    好消息是,您现在可以将其作为 $model->updatedTimestamp 访问,并且仍然具有 $model->updated 中的原始DB值 .

  • 1

    在我的头顶,但这应该工作 .

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

相关问题