2017-09-05 9 views
-2

では動作しません。モデルを保存しようとすると、常に空になります($workspace->save())。検証が失敗したため( "created_atは空白にできません")、保存できません。このクラスに特別なものは何もありません。何も上書きされません。何が問題なの?TimestampBehaviorは、私は<a href="http://www.yiiframework.com/doc-2.0/yii-behaviors-timestampbehavior.html" rel="nofollow noreferrer">TimestampBehaviour</a>と以下のクラスを持っているので、失敗の検証

答えて

0

検証ルールが問題を引き起こしたことが判明しました。予期せぬことに、私はすべてが正しいと考えていたからです。

public function rules() { 
    return [ 
     [['id', 'name', 'created_at'], 'required'], 
     [['id'], 'int'], 
     [['name'], 'string', 'max' => 100], 
     [['created_at' ], 'datetime'], 
    ]; 
} 

created_at必要あってはならない - それが問題だった:これらは私のルールでした。

それもdocumentedです:属性値は、この動作によって自動的に設定されますので、彼らは通常、ユーザ入力されていないため、検証すべきではない 、

すなわちのcreated_atとupdated_atのはで表示されませんモデルのrules()メソッド

$workspace->save()が実行されると、最初の手順は検証です。そしてそのステップの後で、EVENT_BEFORE_INSERT/EVENT_BEFORE_UPDATEがトリガされ、TimestampBehaviourが指定フィールドに入力されます。これは、検証が成功した場合にのみ発生します。 (var_dumpを実行すると、空のcreated_atが表示されます。)あまりにも遅れて、検証がすでに行われており、検証エラーが発生しています。

ルールからcreated_atを削除することをお勧めします。もちろん、他のアプローチも可能です(例えば、検証を無効にするか、save()が呼び出されたときに検証する必要があるプロパティを渡します)。

0

は怒鳴る

public function behaviors() 
{ 
    return [ 
     [ 
      'class' => TimestampBehavior::className(), 
      'createdAtAttribute' => 'create_time', 
      'updatedAtAttribute' => 'update_time', 
      'value' => new Expression('NOW()'), 
     ], 
    ]; 
} 

のような振る舞いを追加して、あなたのモデルクラスで安全なレコードを追加します。

public function rules() 
{ 
    return array(
     array('create_time,update_time', 'safe'), 
    ); 
} 
関連する問題

 関連する問題