Laravel Artisan Tinkerで以下を実行する場合:
_$article = new App\Article;
$article->published_at = Carbon\Carbon::now();
_
このエラーが発生します:
_InvalidArgumentException with message 'Trailing data'
_
ただし、Carbon\Carbon::now()
は、それ自体でCarbon
インスタンスを期待どおりに返します。
_published_at
_は、モデルの_protected $dates = ['published_at'];
_を介してCarbonインスタンスに変更する必要があり、_protected $fillable
_にも含まれています。
ここで何が起こっているのか、どうすれば解決できるのか誰か知っていますか?
編集:ルートのクロージャで実行されたときに同じことが起こるので、Tinkerに固有ではありません
編集2:他の人がこれを経験しているようです: https://laracasts.com/discuss/channels/general-discussion/carboncarbonnow-giving-error そしてコメントで2回 https:/ /laracasts.com/series/laravel-5-fundamentals/episodes/8
編集3:最初の例とほぼ同じコードが https://laracasts.com/series/laravel-5-fundamentals/episodes/15 15:10にエラーなしで使用されています。
編集4:上記のコードの2行目を$article->published_at = Carbon::now()->format('Y-m-d');
に交換すると正常に機能し、データベースに保存されている時間も含まれます(理由はわかりませんが)。
「トレーリングデータ」は完全な日時が長すぎることを指していると思いますが、Laravelは日時を自動的に処理します(たとえば、Carbonインスタンスへの自動変換)しかし、これではありません。
ただし、Edit3での使用が望ましいでしょう。
2番目のパラメータ_$date
_もCarbonオブジェクトでない限り、createFromFormat
を使用すべきではないことがわかりましたが、そうではなく、文字列だけの場合は、そのまま使用できます。
_public function setPublishedAtAttribute($date){
$this->attributes['published_at'] = Carbon::parse($date);
}
_
どの形式であるかを把握する必要があるという点で、もう少しオーバーヘッドがあると思いますが、これは私の一時的な回避策でした。
「Y-m-d」は、フロントがそれをフォームに解析する方法ですが、Carbonが吐き出すものであるデータベースに入ります。同じエラーが発生しました:
_[2015-08-16 21:35:57] production.ERROR: exception 'InvalidArgumentException' with message 'Trailing data' in /Users/alexanderkleinhans/laravel/vendor/nesbot/carbon/src/Carbon/Carbon .php:414
_
私はスタックトレースの最初の部分を信じています、
Carbon\Carbon::createFromFormat('Y-m-d', Object(Carbon\Carbon))
2番目のパラメーターはCarbonオブジェクトでなければならないことを示しているため、PHPの場合のようにdate('Y-m-d')
だけでなく、フォームでもそのようにする必要がある場合があります。
データベースが次のような10進数のマイクロタイムで日付値を返している場合、このエラーが発生します。
2016-10-06 20:16:23.96034
これらの余分な10進数が問題です。それらを削除すると、機能するはずです。
Laracastチュートリアルに従っていますが、同じエラーが発生しました。私はついにこの例外の何が悪いのかを理解しました。
関数内:
public function setPublishedAtAttribute($date)
{
$this->attributes['published_at'] = Carbon::createFromFormat('Y-m-d', $date);
}
$ dateのフォーマットが'Y-m-d'であることに気づきました
ただし、私のcreate.blade.phpとedit.blade.phpでは、フォーム入力は次のとおりです。
{!! Form::input('data-date', 'published_at', date('d-m-Y'), ['class' => 'form-control']) !!}
私の日付形式が'd-m-Y'であることに気づきました。
これが、Laravelによって例外がスローされる理由です。
すべてのファイルで日付形式を'Y-m-d'と同じにすると、例外がなくなります。これがお役に立てば幸いです。
環境ハンドラーの日付が異なるため、私は常にこの問題を抱えています。これでカーボンでデートをやめました。
public function getDates() { return []; }
末尾のタイムゾーンデータを含む日付の操作は、Eloquentアクセサーを使用してその末尾のデータを削除することで修正されます。
public function getTimestampColumnAttribute()
{
return Carbon::createFromFormat($this->dateFormat, strtok($this->attributes['timestamp_column'], '.'));
}