Laravel: день рождения пользователя сбрасывается при входе пользователя - PullRequest
1 голос
/ 17 марта 2019

У меня очень странная проблема в приложении Laravel.

В моем приложении: у меня есть поле, в котором пользователи должны указывать дату своего рождения при регистрации. Все сохраняется правильно и отображается правильно после регистрации и входа в систему в первый раз (он автоматически регистрирует вас после регистрации). Но как только вы выйдете из системы и снова войдете в систему: дата рождения сбрасывается на сегодняшнюю. И вот где это становится странным: это происходит только тогда, когда я делаю это на рабочем сервере. На локальном сервере разработки он ведет себя совершенно нормально.

Это происходит только с определенной учетной записью, которая вошла в систему, и не влияет на все учетные записи одновременно.

Рабочий сервер запущен из Laravel Forge и размещен на DigitalOcean. Рабочий сервер работает под управлением Ubuntu 18.04 и PHP версии 7.2

Локальный сервер разработки - это компьютер под управлением Windows, и я использую все, что поставляется с Laragon .

Используемая версия Laravel - 5.6

.

Теперь вот весь код, который у меня есть вокруг поля дня рождения:

Миграция базы данных

Schema::table('users', function (Blueprint $table) {
    $table->timestamp('birthday')->after('password');
});

RegisterController.php

protected function validator(array $data)
{
    return Validator::make($data, [
        ...
        'birthday' => 'required|date_format:d.m.Y',
        ...
    ]);
}

protected function create(array $data)
{
    return User::create([
        ...
        'birthday' => Carbon::parse($data['birthday'])->format('Y-m-d H:i:s'),
        ...
    ]);
}

LoginController использует по умолчанию нетронутый код входа в систему, созданный командой artisan make:auth в версии 5.6 Laravel.

Вот код контроллера для предпочтений моих пользователей, где они могут изменить дату своего рождения в случае, если они пропустили его при регистрации.

AccountController.php Это код, который захватывает текущего вошедшего в систему пользователя и отображает его настройки:

public function index() {
    $user = User::find(Auth::id());

    return view('account.account')->withUser($user);
}

И это та часть, которая сохраняет и обновляет свои настройки, когда нажимает на кнопку сохранения:

public function update(Request $request) {
    $this->validate($request, [
        ...
        'birthday' => 'required|date|before:-15 years'
    ]);

    $user = User::find(Auth::id());

    ...
    $user->birthday = Carbon::parse($request->birthday)->format('Y-m-d H:i:s');
    ...
    $user->save();

    Session::flash('success', 'Din bruker ble oppdatert.');

    return redirect()->route('my.account');
}

Это все отлично работает, обновляет и правильно устанавливает день рождения в базе данных. Это просто изменяется на сегодняшнюю дату, когда пользователь вошел в систему. Не происходит с локальным сервером разработки, а только на рабочем сервере. Что очень затрудняет правильную отладку.

Дайте мне знать, если вам нужна дополнительная информация. Любая помощь с благодарностью:)

1 Ответ

1 голос
/ 17 марта 2019

Измените тип столбца с timestamp на datetime.

...