2017-01-05 20 views
0

注文モデルがあり、注文の1つで「ステータス」を変更したいとします。私は、このようなコードを実行します。Yii2 - save()は保存されません

$order = new Order(); 
     $new = $order->find()->where(['status' => 'new'])->orderBy(['id' => SORT_ASC])->one(); 
     if($new){ 
      $new->status = "queued"; 
      $ok = $new->save(); 
      return true; 
     } 

そして、$newは私がしたいレコードですので、それは大丈夫です。変更を保存しようとすると、do notはそれを行い、$okは私に "false"を与えます。私はなぜ、私は前にsave()を使用して、決してそれに問題を抱えているのか分かりません。

更新: 発見された間違いで、save()機能に接続されていません。

+6

'$ new-> getErrors()'の結果を 'save()'が呼び出された後に表示することで、検証エラーがあるかどうかを確認できます。 – Bizley

+0

さて、私が持っていたルールに間違いがあったことが分かりました。 'getErrors()'が助けてくれました:) – Olga

答えて

0

モデルの検証のために値が保存されません。モデルの検証をスキップしてfalseにすることができます。

$order = new Order(); 
    $new = $order->find()->where(['status' => 'new'])->orderBy(['id' => SORT_ASC])->one(); 
    if($new){ 
     $new->status = "queued"; 
     $ok = $new->save(false); // skip model validation 
     return true; 
    } 
関連する問題