Mam tabelę z kolumną for_date
zapisaną przez typ integer w bazie danych. W celu wykazania for_date
z formatem DateTime, użyłem ActiveForm z kodem:Yii2 Konwertuj z liczby całkowitej na datetime, aby wyświetlić i zapisać w bazie danych z liczbą całkowitą
<?= $form->field($model, 'for_date')->textInput([
'class' => 'form-control datepicker',
'value' => $model->for_date ? date(Yii::$app->params['dateFormat'], $model->for_date) : date(Yii::$app->params['dateFormat'], time()),
'placeholder' => 'Time'])
->label('Attendance Date') ?>
Ale kiedy tworzyć i zapisywać, Yii poinformował This field must be integer
W pliku modelu, miałem 2 funkcje poniżej przekonwertować przed validate , ale nadal jest to błąd.
public function beforeValidate(){
if(!is_int($this->for_date)){
$this->for_date = strtotime($this->for_date);
$this->for_date = date('d/M/Y', $this->for_date);
}
return parent::beforeValidate();
}
public function afterFind(){
$this->for_date = \Yii::t('app', Yii::$app->formatter->asDate($this->for_date));
$this->for_date = date('d/M/Y', $this->for_date);
return parent::afterFind();
}
Jak mogę zrobić to dobrze, aby zapisać do bazy danych z liczbą całkowitą?
chciałbym pozostawić go jako 'int' w modelu i użyj gettera i setera. Komunikat o błędzie pojawia się najprawdopodobniej z ustawień reguły. Więc możesz tam zmienić swój weryfikator. –
Tak, to prawda. – Francis