如何将当前user_id保存到数据库(YII2)

时间:2016-11-07 02:06:04

标签: yii2 yii2-advanced-app yii2-user

我尝试将当前的user_id保存到数据库中的教育表。但是,user_id的数据未填充。这是我的代码。

模特

public function rules()
{
    return [
        [['year', 'fieldstudy', 'institute', 'grade'], 'required'],
        [['user_id'], 'integer'],
        [['year', 'fieldstudy', 'institute', 'grade'], 'string', 'max' => 255],
    ];
}


public function attributeLabels()
{
    return [
        'education_id' => 'Education ID',
        'user_id' => 'User ID',
        'year' => 'Year',
        'fieldstudy' => 'Fieldstudy',
        'institute' => 'Institute',
        'grade' => 'Grade',
    ];
}

public function getUser()
{
    return $this->hasOne(User::className(), ['user_id' => 'user_id']);
}      

在控制器

     public function actionCreate()
{
    $model = new Education();
    $model->user_id =Yii::$app->user->id;

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

        return $this->redirect(['view', 'id' => $model->education_id]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

如何解决问题并修复代码?感谢

2 个答案:

答案 0 :(得分:0)

Yii::$app->user->id更新为Yii::$app->user->identity->id

public function actionCreate()
    {
        $model = new Education();

        if ($model->load(Yii::$app->request->post())) {
        $model->user_id =Yii::$app->user->identity->id;
        if($model->save()){
            return $this->redirect(['view', 'id' => $model->education_id]);
        } 
        }
            return $this->render('create', [
                'model' => $model,
            ]);
    }

答案 1 :(得分:0)

你必须检查两件事

  1. 检查用户是否已登录。
  2. 使用Yii2调试器查看我们是否通过代码Yii::$app->user->idYii::$app->user->id
  3. 获取登录用户的ID值

    使用Yii2调试器通过使用代码

    检查我们获得的用户id值是否正确
    Yii::info("User id=".Yii::$app->user->id); 
    

    您必须在控制器中尝试的完整代码如下所示

     public function actionCreate() {
            $model = new Education();
    
            //checking whether we are getting the logged in user id value
            Yii::info("User id=".Yii::$app->user->id); 
    
            $model->user_id = Yii::$app->user->id;
    
            if ($model->load(Yii::$app->request->post()) && $model->save()) {
    
                 //checking here the saved user id value in  table
                 Yii::info("checking User id after saving model=".$model->user_id); 
    
                return $this->redirect(['view', 'id' => $model->education_id]);
            } else {
                return $this->render('create', [
                            'model' => $model,
                ]);
            }
        }
    

    现在运行应用程序后,您可以使用Yii2调试器检查在各个位置的用户ID中设置的值。