我的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使用的是Laravel 5.6版中由工匠命令make:auth
生成的默认的未经修改的登录代码。
这是我的用户首选项的控制器代码,如果他们在注册期间未正确输入生日,则可以在其中更改出生日期。
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');
}
这一切都很好,它可以在数据库中正确更新和设置生日。用户登录后,它会更改为今天的日期。本地开发服务器不会发生这种情况,只有在生产服务器中才会发生这种情况。这使得正确调试非常困难。
如果您需要更多信息,请告诉我。任何帮助,我们将不胜感激:)
答案 0 :(得分:1)
将列的类型从timestamp
更改为datetime
。