2017-05-07 88 views
1

我有一個簡單的模型只有2個參數 - '總和'和'名稱'。我創建了這個模型的類的一個新對象,並將它發送到一個視圖。鑑於我有兩個領域 - 也是'總和'和'名字'。 當我在字段中輸入值(fe sum = 10,name = Joe)時,我期望我的當前總和將減少10,但對於用戶Joe,它將增加10.(數據庫中還有三列 - 'id', 'sum'和'name')。 但我不能從該字段傳輸此名稱來更新數據庫。如何使用活動記錄字段創建類的對象?

//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'], 
    ]; 
} 

,並顯示您的用戶模型。還必須有屬性名稱和總和的驗證器。

和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的幫助。一切都很好。只需要發佈($ this-> username)而不是post('username')。 – Jens