Проблема с обновлением даты из формы в базу данных - PullRequest
2 голосов
/ 06 мая 2020

Я пытаюсь обновить столбец date_of в базе данных, и когда я отправляю свою форму, я получаю эту ошибку

DateTime::__construct(): Failed to parse time string (25/03/1995) at position 0 (2): Unexpected character

Теперь в моем клинке я сформировал дату рождения, чтобы показать d / m / Y и когда обновление Я думаю, что он обновляет Y / m / d, потому что, когда я удаляю функцию форматирования с моего лезвия, она работает нормально. Поэтому мне нужна помощь в том, как обновить формат ('d / m / Y') в моей базе данных и как правильно проверить его при проверке моего запроса формы. Любая помощь приветствуется. Вот мой код.

index.blade. php

<input type="text" placeholder="dd/mm/yyyy" name="date_of_birth" value="{{ $userForShowProfile->date_of_birth ? $userForShowProfile->date_of_birth->format('d/m/Y') : "" }}">

UserController. php

public function updateProfileCharacteristics(UpdateProfileCharacteristicsRequest $request)
{
     $user = Auth::user();

     $user->update(
     [
        'date_of_birth' => $request->date_of_birth,
        'age' => Carbon::now()->diffInYears($request->date_of_birth),
        'updated_at' =>  Carbon::now()
     ]
     );

     return redirect()->route('profile.show', [$user->username]);
}

UpdateProfileCharacteristicsRequest. php

public function rules()
{
    return [
        'date_of_birth' => ['date'],
    ];
}

Ответы [ 3 ]

1 голос
/ 06 мая 2020

Поскольку вы отправляете дату в запросе в настраиваемом формате, вам нужно будет проанализировать ее до формата, который соответствует формату в столбце базы данных, прежде чем вставлять ее:

 $user->update(
 [
    'date_of_birth' => Carbon::createFromFormat("d/m/Y", $request->date_of_birth)->format('Y-m-d'), // parse the right format here
    'age' => Carbon::now()->diffInYears(Carbon::createFromFormat("d/m/Y", $request->date_of_birth)),
    'updated_at' =>  Carbon::now()
 ]
 );

И для этого формат даты для прохождения проверки, вы можете использовать правило date_format:format вместо date:

public function rules()
{
    return [
        'date_of_birth' => ['date_format:"d/m/Y"'],
    ];
}
0 голосов
/ 06 мая 2020

Если вы хотите сохранить ДАТУ в БД, она должна быть в формате Ymd.

попробуйте это:

public function updateProfileCharacteristics(Request $request)
{

   $user = Auth::user();

   $user->update([
        'date_of_birth' => Date('Y-m-d',strtotime($request->date_of_birth)),
        'age' => Carbon::now()->diffInYears($request->date_of_birth),
        'updated_at' =>  Carbon::now()
     ]);

     return redirect()->route('profile.show', [$user->username]);
}
0 голосов
/ 06 мая 2020

Какой тип столбца используется при миграции базы данных? Если это проверить, является ли это DATE, DATETIME или TIMESTAMP, предполагается, что это DATE, поэтому вы можете отформатировать свою дату как Ymd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...