0

Active Record の属性は、モデル クラスとどのように異なるのでしょうか? dob という名前のデータベースからの列がある User モデルがあります。ユーザーから全体として dob を受け入れるつもりはないため、ルール関数には dob を含むものは何もありませんが、代わりに「日付、月、年」が使用されます。

 array('date, month, year', 'validDate'),

そして私はこれをやっています

public function afterValidate()
{
parent::afterValidate();
$this->date_of_birth = date("Y-m-d", strtotime($this->year."".$this->month."".$this->date));
}

データベースに記録された値を保持します。それが Active Reocrd のものなのかモデルなのかよくわかりませんが、日付はユーザーが入力したものではなく 1970-01-01 Unix のデフォルトで保存されているので、何か間違ったことをしているに違いありません。PS私はルールで安全な日付の月と年を持っています。validDate のコード

public function validDate($attributes, $params)
{
   if($this->scenario == 'registration-general')
   {
     if($this->month == 0)
        $this->addError('month','Month cannot be blank');
    elseif(0 > $this->month || $this->month > 12)
        $this->addError('month','Enter a valid month');
   }
}
4

1 に答える 1

1

モデルで年、月、日付を定義してください。

public $year;
public $month;
public $date;

これらが定義されていない場合、それらは大規模な割り当て(または任意の割り当て)中に割り当てられておらず、コード(私のシステムでテストされたもの)は1970-01-01を返します。

また、strtotime引数を次のように変更します。

$this->year."-".$this->month."-".$this->date

ハイフンを使用すると、1桁または2桁の月と日付の形式を使用できます。ハイフンがない場合は2桁を使用する必要がありますが、コードに注意することはそれを保証することを示唆しています。

上記の問題のいずれかが原因でコードが失敗する可能性があります。それらが修正されていることを確認してから、機能するかどうかを確認してください。

編集:パラメータとして渡さない限りsave()、メソッドはメソッドを呼び出します。年、月、日付がとの間で設定されていない場合、validateを2回実行すると属性が消去されます。validate()falsevalidatesavedob

save(false)つまり、スクリプトの前半で使用している場合は、を呼び出して保存validate()します。

于 2012-11-04T05:54:20.933 に答える