2016-08-24 10 views
0

int型の列の値を1で減算する方法はありますか?クリックすると、関数を呼び出してテーブルにデータを保存しますが、 yii 2を使ってデータベースの数値を減算する方法を知りたいです。以下のコードを試しましたが、何の効果もありませんでした。誰かがyii 2で数学演算を行う方法を教えてくれますか?数学演算in yii 2アクティブクエリ

public static function AddSubject($subjectid, $clientid){ 
    $subject = ActiveCurriculum::findOne(['subjectid' => $subjectid]); 

    $activesubject = new ActiveSubject(); 
    $activesubject->clientid = $clientid; 
    $activesubject->subjectid = $subject->subjectid; 
    $activesubject->subjectcode = $subject->subjectcode; 
    $activesubject->days = $subject->days; 
    $activesubject->time = $subject->time; 
    $activesubject->section = $subject->section; 
    $activesubject->room = $subject->room; 
    $activesubject->units = $subject->units; 
    $subject->units = $subject->units - 1; //this should subtract the number 
    //of slots by 1 but now it is not working. 
    $activesubject->save(); 

    return true; 

    //return static::findOne(['subjectid' => $subjectid]); 
       //->where(['subjectid' => $subjectid]); 

    } 

答えて

1

あなたのARオブジェクト内のいくつかの変更を行い、変更内容を保存したい場合は、あなたが->save()を実行してくださいに:あなたはちょうどそれを行うには忘れてしまったよう

$subject->units = $subject->units - 1; 
$subject->save(); 

が見えます。

+0

デクリメント部分は次のように単純化することができます: '$ subject-> units - ;' – arogachev

0

あなたは、大規模な属性をコピーして、新しいモデル保存するには、次を使用することができます:あなたは$subjectモデルから引くが、あなたは$activesubjectモデルを保存してコードで

public static function AddSubject($subjectid, $clientid){ 

    $subject = ActiveCurriculum::findOne(['subjectid' => $subjectid]); 

    $activesubject = new ActiveSubject(); 

    $activesubject->attributes = $subject->attributes; 
    $activesubject->isNewRecord = true; 

    $activesubject->clientid = $clientid; 
    $activesubject->units = $activesubject->units - 1; 

    return $activesubject->save(); 
} 

を。