maccliu 2015-08-05 17:18:43 2589次浏览 3条回复 0 0 0

假设我有个很简单的帖子模型Post,里面有3个字段(标题title,内容content,修改时间updated_at),其中title和content是从表单中获取的,updated_at是当前时间。我的问题是,如果我要把当前时间保存到数据表的updated_at字段中,我应该是在controller中设置model的updated_at属性还是在model中的save()中设置当前时间?

如果是在model中设置,能有个简单的代码说明一下怎么写吗?

我自己感觉应该是在model中间设置,这样不用每个controller去设置一次,但是没有找到相关例程,有高手指教一下吗?

  • 回复于 2015-08-06 09:49 举报

    在beforeSave()方法中设置:$this->updated_at=time;

    2 条回复
    回复于 2015-08-06 10:12 回复

    混元霹雳手

    回复于 2015-08-07 02:47 回复

    正解,查了一圈,网上也多是给的这个解决方案,受教了,感谢!

  • 回复于 2015-08-06 10:12 举报

    重写beforeSave():
    public function beforeSave()

    {
    	if (parent::beforeSave()) {
    		if ($this->isNewRecord) { //如果是新增
    			$this->create_time = date('Y-m-d H:i:s');
    		}else{
    			$this->last_time = date('Y-m-d H:i:s');
    		}
    
    		return true;
    	}else {
    		return false;
    	}
    }
    
    1 条回复
    回复于 2015-08-07 02:46 回复

    正解,查了一圈,网上也多是给的这个解决方案,受教了,感谢!

  • 回复于 2015-08-06 10:17 举报

    理论上来讲, controller层接收数据, 原始数据丢给model层处理较为合适, 耦合度更低, 更符合多态特性..

    但是 像 time ip 等 , 诸如此类 similar anywhere 的东西, 直接丢model处理 更加方便, 简洁.

    至于具体解决, 对于yii来讲,

    你可以借用yii的几个事件 beforeValidate beforeSave 等节点做处理, 可以扩展behavior处理[同样是基于event]

    1 条回复
    回复于 2015-08-07 02:45 回复

    受教了,感谢!

您需要登录后才可以回复。登录 | 立即注册