web-dev-qa-db-ja.com

雄弁での保存中に予期しないデータが見つかりました/ Laravel

TIMESTAMPフィールド名が日付であるため、データベースに_created_at_および_updated_at_を介してもう1つのフィールドがあります。

そこで、フィールドをCarbonからインスタンス化したかったので、モデルeloquentのメソッドgetDates()を上書きしました。

_public function getDates()
{
   return ['date','created_at','updated_at'];
}
_

しかし、データベースに新しいレコードを作成しようとすると、例外がスローされます。

InvalidArgumentException予期しないデータが見つかりました。予期しないデータが見つかりました。予期しないデータが見つかりました。

PS:フォームから送信される値はEU形式です:_d-m-Y h:i_

私はこの問題をどのように理解するかわかりません

14

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はミューテーターではなく日付アクセサーを定義するため、ドキュメントに誤りがあります。

14
Jarek Tkaczyk

これを試して:

Carbon::createFromFormat('d.m.Y H:i', $request->publishdate);    
1
Doğuhan Elma

それは1年前の問題ですが、ミューテーターを設定した後でもまだ苦労している人のために私の意見を述べています。

HTML入力日付要素が日付をatom format(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'));

0
Senthil

「d-m-Y h:i」の形式は使用できません

UNIXタイムスタンプ、日付文字列(Y-m-d)、日時文字列、DateTime/Carbonインスタンスのいずれかを使用する必要があります

https://laravel.com/docs/4.2/eloquent#accessors-and-mutators

0
Mantas D