Saya memiliki masalah yang sangat aneh di aplikasi Laravel saya.

Dalam aplikasi saya: Saya memiliki bidang di mana pengguna harus memasukkan tanggal lahir mereka saat mendaftar. Semuanya disimpan dengan benar dan ditampilkan dengan benar setelah mendaftar dan masuk untuk pertama kali (Ini secara otomatis membuat Anda masuk setelah mendaftar). Tapi begitu Anda keluar dan masuk kembali: Tanggal ulang tahun akan diatur ulang ke tanggal hari ini. Dan di sinilah anehnya: Itu hanya terjadi ketika saya melakukannya di server produksi. Ini berperilaku sangat normal di server pengembangan lokal.

Itu hanya terjadi pada akun tertentu yang masuk, dan tidak memengaruhi semua akun sekaligus.

Server produksi dijalankan dari Laravel Forge dan dihosting di DigitalOcean. Server produksi menjalankan Ubuntu 18.04 dan PHP versi 7.2

Server pengembangan lokal adalah mesin Windows dan saya menggunakan Laragon apa pun yang disertakan.

Versi Laravel yang digunakan adalah 5.6


Sekarang inilah semua kode yang saya miliki di sekitar bidang ulang tahun:

Migrasi basis data

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 menggunakan kode login default yang tidak tersentuh yang dihasilkan dari perintah artisan make:auth di Laravel versi 5.6.

Berikut adalah kode pengontrol untuk preferensi pengguna saya di mana mereka dapat mengubah tanggal lahir mereka jika mereka salah memasukkannya saat mendaftar.

AccountController.php Ini adalah kode yang mengambil pengguna yang saat ini masuk dan menampilkan preferensi mereka:

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

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

Dan ini adalah bagian yang menyimpan dan memperbarui preferensi mereka ketika mereka mengklik simpan:

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');
}

Ini semua berfungsi dengan baik, memperbarui dan mengatur ulang tahun dengan benar di database. Itu baru saja diubah ke tanggal hari ini ketika pengguna masuk. Tidak terjadi dengan server pengembangan lokal, dan hanya di server produksi. Yang membuatnya sangat sulit untuk di-debug dengan benar.

Beri tahu saya jika Anda memerlukan info lebih lanjut. Setiap bantuan sangat dihargai :)

1
Alexander Johansen 17 Maret 2019, 12:31

1 menjawab

Jawaban Terbaik

Ubah jenis kolom dari timestamp menjadi datetime.

1
Rouhollah Mazarei 17 Maret 2019, 10:10