0

大家好,我正在使用 dektrium 的 yii2 用户。我会在我的表中保存 user_id 一个帐户。User 表与我的表有 1..N 关系。我是一名负责人,不知道如何在我的表中保存用户 ID。我试过了,但数据库中的记录是空白的。

我的模型

public static function tableName()
{
    return 'viaggio';
}


/**
 * @inheritdoc
 */
public function rules()
{
    return [
        [['citta_part','citta_arrivo','user_id'], 'required'],
        [['data_part','ora_part','data_arrivo','ora_arrivo'],'safe'],
        [['posti_disponibili', 'conferma_utenze', 'user_id','posti_max'], 'integer'],
        [['prezzo'], 'number'],
        [['citta_part', 'via_part', 'citta_arrivo', 'via_arrivo', 'veicolo'], 'string', 'max' => 45],
        [['note'], 'string', 'max' => 255],
        [['wifi', 'bagno', 'ac_dc','condizioni'],'integer'],
        [['user_id'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['user_id' => 'id']],

    ];
}

/**
 * @inheritdoc
 */
public function attributeLabels()
{
    return [
        'id_viaggio' => Yii::t('app', 'Id Viaggio'),
        'citta_part' => Yii::t('app', 'Citta Part'),
        'via_part' => Yii::t('app', 'Via Part'),
        'ora_part' => Yii::t('app', 'Ora Part'),
        'data_part' => Yii::t('app', 'Data Part'),
        'posti_disponibili' => Yii::t('app', 'Posti Disponibili'),
        'conferma_utenze' => Yii::t('app', 'Conferma Utenze'),
        'prezzo' => Yii::t('app', 'Prezzo'),
        'note' => Yii::t('app', 'Note'),
        'citta_arrivo' => Yii::t('app', 'Citta Arrivo'),
        'data_arrivo' => Yii::t('app', 'Data Arrivo'),
        'ora_arrivo' => Yii::t('app', 'Ora Arrivo'),
        'via_arrivo' => Yii::t('app', 'Via Arrivo'),
        'veicolo' => Yii::t('app', 'Veicolo'),
        'posti_max' => Yii::t('app', 'Posti Max'),
        'wifi' => Yii::t('app', 'Wifi'),
        'bagno' => Yii::t('app', 'Bagno'),
        'ac_dc' => Yii::t('app', 'Ac Dc'),
         'user_id' => Yii::t('app', 'User ID'),

    ];
}


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

我的控制器

public function actionOffri() {

    $model = new Offri;

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

      $model->$user_id = Yii::$app->user->identity->id;
      Yii::$app->session->setFlash('success', 'Hai inserito i dati correttamente');

      return $this->render('offri', ['model' => $model]);

    } else {

      Yii::$app->getSession()->setFlash('error', 'Completa correttamente tutti i campi.');
      return $this->render('offri', ['model' => $model]);
    }

}

建议?

4

2 回答 2

2

首先尝试在验证之前移动 user_id 的分配,否则验证肯定会失败并且模型不会保存

public function actionOffri()
{
    $model = new Offri;

    $model->$user_id = Yii::$app->user->id;
    if($model->load(Yii::$app->request->post())&& $model->validate() && $model->save()) {

        Yii::$app->session->setFlash('success', 'Hai inserito i dati correttamente');
        return $this->render('offri', ['model' => $model]);
    } else {
        Yii::$app->getSession()->setFlash('error', 'Completa correttamente tutti i campi.');
        return $this->render('offri', ['model' => $model]);
   }
}

或者如果你需要用户名,你可以使用 Yii::$app->user->identity->username

于 2016-08-31T16:50:04.070 回答
1

我认为您的代码有错误:

$model->$user_id = Yii::$app->user->identity->id;

尝试将其替换为:

$model->user_id = Yii::$app->user->identity->id;
于 2016-08-31T18:51:02.197 回答