Mysql ошибка при создании пользователя - поле не имеет значения по умолчанию - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь сохранить вновь созданного пользователя с профилем.Я использую Yii2-dektrium.Я изменил поля из таблицы profile.Теперь, когда я пытаюсь сохранить профиль перед сохранением пользователя, я получаю сообщение об ошибке, потому что все еще нет пользователя.И это нормально.Но в этом сценарии я получаю эту ошибку:

SQLSTATE[HY000]: General error: 1364 Field 'first_name' doesn't have a default value
The SQL being executed was: INSERT INTO `profile` (`user_id`) VALUES (45)

Строки кода следующие:

public function actionCreate()
    {
        /** @var Profile $profile */
        $profile = new Profile();

        /** @var User $user */
        $user = \Yii::createObject([
            'class'    => User::class,
            'scenario' => 'create',
        ]);
        $event = $this->getUserEvent($user);

        $this->performAjaxValidation($user);

        $this->trigger(self::EVENT_BEFORE_CREATE, $event);

        if ($profile->load(Yii::$app->request->post()) && $user->load(\Yii::$app->request->post())) {

            $user->username = $user->email;

            if($user->save()){

                $user = User::findOne(['email' => $user->email]);
                $profile->user_id = $user->id;

                if($profile->save()){

                    $user->addRoles(Yii::$app->request->post('roles'));

                    \Yii::$app->getSession()->setFlash('success', \Yii::t('user', 'User has been created'));
                    $this->trigger(self::EVENT_AFTER_CREATE, $event);

                    return $this->redirect(['users']);
                }

            }

        }

        return $this->render('create', [
            'account' => $user,
            'profile' => $profile,
            'regionList' => ArrayHelper::getModelsSelect2(new Region()),
        ]);
    }

И это мои измененные Profile правила модели:

public function rules()
    {
        return [
            [['first_name', 'second_name', 'third_name', 'region_id', 'city_id', 'address', 'phone'], 'required'],
            [['region_id', 'city_id'], 'integer'],
            [['first_name', 'second_name', 'third_name', 'address', 'phone'], 'string', 'max' => 255],
        ];
    }

После этого создается только запись пользователя. РЕДАКТИРОВАТЬ Схема моей таблицы:

mysql> DESCRIBE `profile`;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| user_id     | int(11)      | NO   | PRI | NULL    |       |
| first_name  | varchar(255) | NO   |     | NULL    |       |
| second_name | varchar(255) | NO   |     | NULL    |       |
| third_name  | varchar(255) | NO   |     | NULL    |       |
| region_id   | int(11)      | YES  | MUL | NULL    |       |
| city_id     | int(11)      | YES  | MUL | NULL    |       |
| address     | varchar(255) | NO   |     | NULL    |       |
| phone       | int(11)      | NO   |     | NULL    |       |
| image       | varchar(255) | NO   |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+
...