Вот мой код контроллера
if ($this->request->isPost) {
$model->created_by = Yii::$app->user->identity->id;
$model->created_at = date('Y/m/d');
// echo $model->created_at;die;
if ($model->load($this->request->post()) && $model->save()) {
return $this->redirect(['index', 'id' => $model->id]);
}
}
и есть мое типовое правило
public function rules()
{
return [
[['deduction_type'], 'required'],
[['created_at'], 'safe'],
[['created_by'], 'integer'],
[['deduction_type'], 'string', 'max' => 100],
];
}
Моя проблема в том, что каждый раз, когда я передаю значение в create_at и create_by, данные сохраняются в базе данных как null. Я хочу свое фактическое значение в db.
@Anant-Alivetodie, как вы говорите, я пробовал дату ('Y-m-d'), а также пробовал дату ('Y-m-d H: i: s'), но в последний раз он передает нулевое значение в db
Вместо твоего пути
if ($this->request->isPost) {
//Move that two Lines inside the if
$model->created_by = Yii::$app->user->identity->id;
$model->created_at = date('Y/m/d');
// echo $model->created_at;die;
if ($model->load($this->request->post()) && $model->save()) {
return $this->redirect(['index', 'id' => $model->id]);
}
}
Я обычно делаю следующее:
if ($this->request->isPost) {
if ($model->load($this->request->post()) && $model->validate()) {
$model->created_by = Yii::$app->user->identity->id;
$model->created_at = date('Y/m/d');
$model->save();
return $this->redirect(['index', 'id' => $model->id]);
}
}
validate()
-> Проверяет правильность ввода в соответствии с вашими правилами.
После этого вы знаете, что записи были правильными, и вы можете установить свои значения.
Это мой обычный способ решения этой проблемы.
Вы также можете обернуть $model->save();
if
, чтобы проверить свои изменения и уловить потенциал false
функции save().
Проверьте свой POST, он отправляет пустые поля created_at и created_by? не отправляйте эти поля в сообщениях, и метод load() не заменит их нулевыми значениями.
Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, такие как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
я был проверен, но данные не были пустыми
Если вы действительно хотите вставить текущий идентификатор пользователя и текущее время, используйте методы BlameableBehavior и TimestampBehavior.
BlameableBehavior автоматически заполняет указанные атрибуты текущим идентификатором пользователя. https://www.yiiframework.com/doc/api/2.0/yii-behaviors-blameablebehavior
TimestampBehavior автоматически заполняет указанные атрибуты текущей отметкой времени. https://www.yiiframework.com/doc/api/2.0/yii-behaviors-timestampbehavior
Измените
$model->created_at = date('Y-m-d');
, так как формат даты таблицы базы данныхY-m-d
. тогда толькоsafe
будет работать.