2017-05-07 7 views
1

「sum」と「name」という2つのパラメータしかない単純なモデルがあります。私はこのモデルのクラスの新しいオブジェクトを作成し、それをビューに送りました。私は2つのフィールド、つまり「合計」と「名前」を持っています。 フィールドに値を入力すると(fe sum = 10、name = Joe)、現在の合計が10ずつ減少することが期待されますが、ユーザーJoeの値は10ずつ増加します(データベースには3つの列もあります。 'sum'と 'name')。 しかし、私はフィールドからこの名前をdbに更新することはできません。アクティブなレコードフィールドを使用してクラスのオブジェクトを作成する方法は?

//Controller 
public function actionSum() 
{ 
    $model = new SumForm(); 
    if ($model->load(Yii::$app->request->post())) { 
     if ($user = $model->sumfunction()) { 
     } return $this->goHome(); 
    } 
    return $this->render('sum', [ 
     'model' => $model, 
    ]); 
} 

//Model 
class SumForm extends Model 
{ 
public $sum; 
public $name; 


public function attributeLabels() 
{ 
    return [ 
     'sum' => 'Sum', 
     'name' => 'Name', 
    ]; 
} 

public function sumfunction() 
{ 
    if ($this->validate()) { 
     $desc = User::findOne(Yii::$app->user->getId()); 
     $desc->sum -= $this->sum; 
     $desc->save(); 
     $inc = User::findOne(['name'=>Yii::$app->request->post('name')]); 
     //here I need to take a row for user which name I input 
     $inc->sum += $this->sum; 
     $inc->save(); 
    } 
} 

//in view 'sum' only two fields and button 

答えて

0

ActiveRecordを使用すると、モデルに添付されたパラメータが取得されます。この場合、SumForm [名前]、それを使用するための

ベストな方法:

$inc = User::findOne(['name' => $this->name]); 
    $inc->sum += $this->sum; 
    $inc->save(false); //without validation! Fix it later. 

とSumFormに追加します。

public function rules() 
{ 
    return [ 
     [['name'], 'string'], 
     [['sum'], 'safe'], 
    ]; 
} 

とあなたのUserモデルを示しました。属性nameとsumのバリデータも必要です。

とactionSum()変化:

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

モデルが検証に失敗した場合は、フォームにエラーが表示されます。

形式:

<?php $form = ActiveForm::begin(); ?> 

<?= $form->field($model, 'name')->textInput() ?> 
<?= $form->field($model, 'sum')->textInput() ?> 

<?= Html::submitButton('confirm') ?> 
<?php ActiveForm::end(); ?> 
+0

はご回答いただきありがとうございます!しかし、この場合はdbの更新はありません。 – Jens

+0

申し訳ありませんが、答えを更新しました... – onmotion

+0

助けてくれたonmotionに感謝します。すべてが大丈夫だった。 post( 'username')の代わりに必要な投稿($ this-> username)のみ。 – Jens

関連する問題