問題
日付を登録・更新する際に日付フォームのパラメータで、Carbon Data Missingエラーが発生した。
(datepickerを使用していて、渡ってくる値はY-m-d H:i)
このエラーは秒(second)が入っていないなどパラメータが不足することが原因で発生するため、パラメータに秒が含まれてないときの対処法を以下で説明する
概要
日付カラムを追加するため、モデルで$datesを設定している
protected $dates = [
'public_start_at',
'public_end_at',
];
$datesに設定しているとデフォルトでY-m-d H:i:sとなり、渡される値に過不足があると今回のようにCarbon Data Missingが起こってしまう
下記のようにdateFormatを設定することもできるが日付フィールド全体が'Y-m-d H:i'の形式になってしまうため、扱いづらい。
protected $dateFormat = 'Y-m-d H:i';
対処法
パラメータに渡すときは':00'を追加することで疑似的に秒を追加して対処する
$news->public_start_at = $requestData['public_start_at'].':00';
$news->public_end_at = $requestData['public_end_at'].':00';
ちなみにCarbonはY-m-d H:i:sの値しか受け付けない。(Y/m/dなどははじかれるので注意)
参考記事
日付ミューテタ
https://readouble.com/laravel/6.x/ja/eloquent-mutators.html
Laravel Carbon Data Missing
https://stackoverflow.com/questions/34968061/laravel-carbon-data-missing