В `Yii2` я передаю значение модели, но оно отображается как нулевое

Вот мой код контроллера

 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.

Измените $model->created_at = date('Y-m-d');, так как формат даты таблицы базы данных Y-m-d. тогда только safe будет работать.

Anant - Alive to die 24.01.2023 09:27

@Anant-Alivetodie, как вы говорите, я пробовал дату ('Y-m-d'), а также пробовал дату ('Y-m-d H: i: s'), но в последний раз он передает нулевое значение в db

Bhavesh Sahu 24.01.2023 12:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
75
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вместо твоего пути

 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() не заменит их нулевыми значениями.

я был проверен, но данные не были пустыми

Bhavesh Sahu 30.01.2023 12:20

Если вы действительно хотите вставить текущий идентификатор пользователя и текущее время, используйте методы 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

Другие вопросы по теме