2016-07-05 11:03:22 11267次浏览 7条回答 3 悬赏 10 金钱

如题,

$model = $this->findModel($id);
        
$_POST['Test']['update_time'] = time();
        
if ($model->load(Yii::$app->request->post()) && $model->save()) {
    return $this->redirect(['index']);
}

我想在保存之前加一个更新时间,但是直接修改$_POST没有用数据库update_time字段并没有数据。

最佳答案

  • 回答于 2016-07-05 11:24 举报
    $model = $this->findModel($id);
            
    $_POST['Test']['update_time'] = time();
    
    Yii::$app->request->setBodyParams($_POST); // here
    
    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['index']);
    }
    
    1 条回复
    回复于 2016-07-05 11:44 回复

    $model = $this->findModel($id);

        $_POST['Test_cat']['update_time'] = time();
        Yii::$app->request->setBodyParams($_POST);
        
        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['index']);
        }
    

    没有用,数据库还是没

  • 回答于 2016-07-05 11:51 举报

    不是有behaviors自动更新时间么?

    public function behaviors()
    {
         return [
             [
                 'class' => TimestampBehavior::className(),
                 'createdAtAttribute' => 'created_at',
                 'updatedAtAttribute' => 'updated_at',
                 'value' => new Expression('NOW()'),
             ],
         ];
    }
    
    1 条回复
    回复于 2016-07-05 12:00 回复

    楼上正解。

    , , , 觉得很赞
  • 回答于 2016-07-10 16:00 举报

    学习了,谢谢

  • 回答于 2016-10-19 12:20 举报

    请教个问题:
    Yii2 updateAll方法,如果一条数据存在包含多个Object的数组,$set object的值,只修改第一条,怎么让所有满足条件的object对应值都修改?

    {

    "_id" : ObjectId("57b3044030901c656b8b456a"),
    "props" : [ 
        {
            "id" : ObjectId("57a46bd830901cd0688b4569"),
            "ruleId" : ObjectId("57a46bcd30901cd0688b4568"),
            "name" : "like",
            "type" : "single"
        }, 
        {
            "id" : ObjectId("57a46bd234901cd0688b4278"),
            "ruleId" : ObjectId("57a46bcd30901cd0688b4568"),
            "name" : "like",
            "type" : "double"
        }, 
        {
            ... ...
        }
    ]
    

    }
    上面是我的数据库格式

    return self::updateAll(
        ['$set' => [
                'props.$.name' => 'name',
                'goods.$.type' => '123'
            ]
        ],
        [
            'props.ruleId' => new MongoId("57a46bcd30901cd0688b4568")
        ]
    );
    

    我要修改props满足条件的所有数据,但是只会更改第一条

  • 回答于 2017-06-21 15:40 举报

    按照MVC来说,更新时间属于M的,建议放在Model里,最后就是使用befereSave()方法就可以保存好了,如下
    public function beforeSave($insert){

        if(parent::beforeSave($insert)){
    
            if($insert){
                $this->created_at = time();
                $this->updated_at = time();
            }else{
    
                $this->updated_at = time();
            }
            return true; 
        }else{
            return false;
        }
    }
    
    1 条回复
    回复于 2017-11-11 18:03 回复

    这才是正解,也是 yii框架事件机制。

    觉得很赞
  • 回答于 2019-08-09 10:43 举报

    上面大神都说的很好,再教你一招,不写代码。

    mysql 时间字段用 timestamp 类型,设置为 ON UPDATE
    (自动更新时间)

您需要登录后才可以回答。登录 | 立即注册
738399315@qq.co
助理

738399315@qq.co 东莞

注册时间:2016-01-04
最后登录:2016-12-20
在线时长:7小时7分
  • 粉丝0
  • 金钱35
  • 威望0
  • 积分105

热门问题