eloquent / Laravel での保存中に予期しないデータが見つかりました
-
21-12-2019 - |
質問
データベース上にもう 1 つのフィールドがあります created_at
そして updated_at
として TIMESTAMP
フィールド名は日付です。
そこでメソッドを上書きしました getDates()
私のモデルでは、そのフィールドを Carbon からインスタンス化したかったので雄弁です。
public function getDates()
{
return ['date','created_at','updated_at'];
}
しかし、データベースに新しいレコードを作成しようとすると、例外がスローされます。
InvalidArgumentException 予期しないデータが見つかりました。予期しないデータが見つかりました。予期しないデータが見つかりました。
追伸:フォームから送信される値は EU 形式です。 d-m-Y h:i
この問題をどのように解決するかわかりません。提案をいただければ幸いです
解決
getDates から返された配列はデフォルトのものとマージされ、次のようになります。
['created_at','updated_at','deleted_at','date','created_at','updated_at'];
したがって、「日付」のみを使用すれば問題ありません。
「日付」のミューテーターを設定して、入力データをタイムスタンプ形式に変換してみてください。発生するエラーは Eloquent ではなく Carbon で発生します。
public function setDateAttribute($value)
{
$this->attributes['date'] = Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
}
また、getDates はミューテーターではなく日付アクセサーを定義しているため、ドキュメントに誤りがあります。
他のヒント
これを試して:
Carbon::createFromFormat('d.m.Y H:i', $request->publishdate);
「d-m-Y h:i」という形式は使用できません
次のいずれかを使用する必要があります。UNIX タイムスタンプ、日付文字列 (Y-m-d)、日時文字列、DateTime / Carbon インスタンス
https://laravel.com/docs/4.2/eloquent#accessors-and-mutators
1 年前の問題ではありますが、ミューテーターを設定した後でもまだ苦労している人のために意見を述べます。
HTML 入力日付要素がアトム形式 (1975-12-25T14:15:16-05:00) で日付を渡す場合、日付ミューテーターは役に立ちません。(laravel#5 で) 機能させるには、行#2848 の Illuminate\Database\Eloquent\Model クラスに次の修正を適用する必要があります。
$value = Carbon::createFromFormat($format, (new DateTime($value))->format('Y-m-d H:i:s'));