質問

データベース上にもう 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'));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top