2017-01-11 15:10:02 1681次浏览 2条回答 0 悬赏 15 金钱
public function actionUpdate($id)
{
    $model = $this->findModel($id);

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        // print_r($model->getErrors());
        // exit;
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}

数据库的读取没有问题。就是新建,更新不行。$model->load(Yii::$app->request->post()) 这个条件没毛病。用navicate可以手动更改数据库。我这个博客就是魏曦老师的blogdemo2他在视频里就没有报错,不知道大家有没有听过他的视频。

最佳答案

  • wq135751675 发布于 2017-01-11 16:10 举报

    $model->load(Yii::$app->request->post())
    这里没有成功载入

    12 条回复
    回复于 2017-01-11 16:47 回复

    我单独测了下if ($model->load(Yii::$app->request->post())
    可以继续执行的。表明成功载入。我觉得是 && $model->save()这块出问题了

    回复于 2017-01-11 16:51 回复

    不,就是'load'的原因,你的模块有rules90方法吗?

    回复于 2017-01-11 16:54 回复

    load() 返回 true 只是表示载入了,但是可能载入了0个数据啊!也就是说你的数据没有通过rules(),一个都没有

    回复于 2017-01-11 16:59 回复

    解决办法:1,使用setAttributes('数据',false);2,用 load(), 但是对应的模块里面要有 rules() 方法

    回复于 2017-01-11 17:02 回复

    public function rules()
    {
        return [
            [['title', 'content', 'status', 'author_id'], 'required'],
            [['content', 'tags'], 'string'],
            [['status', 'create_time', 'update_time', 'author_id'], 'integer'],
            [['title'], 'string', 'max' => 128],
            [['author_id'], 'exist', 'skipOnError' => true, 'targetClass' => Adminuser::className(), 'targetAttribute' => ['author_id' => 'id']],
            [['status'], 'exist', 'skipOnError' => true, 'targetClass' => Poststatus::className(), 'targetAttribute' => ['status' => 'id']],
        ];
    }
    

    和数据库比对了验证规则没发现错误,刚开始我也觉得是这个原因,现在又不知所措了。应该怎么改呢

    回复于 2017-01-11 17:08 回复

    这样$model->load(Yii::$app->request->post())后,打印一下$model,看看有没有赋值成功.如果没成功,就在$model->load(Yii::$app->request->post())后打印$model->getErrors();看看有没有错

    回复于 2017-01-11 17:29 回复


    if ($model->load(Yii::$app->request->post())){

            // return $this->redirect(['view', 'id' => $model->id]);
               var_dump($model);
               exit;
               
            }else{
                print_r($model->getErrors());
                exit;
               
            }
    

    这样确实能打印出来$model,和我修改的信息一样。接下来呢,谢谢你,亲

    回复于 2017-01-11 17:38 回复

    那还真是 save() 出错了,没有任何错误信息吗?

    回复于 2017-01-11 17:42 回复


    print_r($model->getErrors());返回空数组array();让这个为难一天啦。还没找到解决方法呢

    回复于 2017-01-11 17:46 回复

    呵呵,
    `public function rules()
    {

    return [];
    

    }`
    rules()返回空数组看看,这样至少可以判断出是不是 rules 出错了,一个一个排除吧

    回复于 2017-01-11 18:06 回复


    想哭,rules规则为空还是不能存入数据库

    回复于 2017-01-11 18:31 回复


    谢谢你,找到问题所在啦!!post类中,beforeSave($insert)代码有问题少了个return true;所以还没到save就出问题了呢。

    public function beforeSave($insert)
    {
        if(parent::beforeSave($insert))
        {
            
            if($insert)
            {
                $this->create_time = time();
                $this->update_time = time();
            }
            else
            {
                $this->update_time = time();
            }
    
            return true;
        }
        else
        {
            return false;
        }
    }
    
  • 回答于 2017-01-11 17:59 举报

    save 之前打印下 $model 看$model->id有没有值,没值的话,save肯定是新建啊

    2 条回复
    回答于 2017-01-11 18:04 回复

    有值,正是我提交的ID

    回答于 2017-01-17 08:48 回复

    有值但是更新不进去表里,是因为你表字段类型验证没有通过!

您需要登录后才可以回答。登录 | 立即注册
RonZone
职场新人

RonZone (北京)

注册时间:2016-11-27
最后登录:2017-02-13
在线时长:2小时8分

热门问题