web-dev-qa-db-ja.com

Carbon \ Carbon :: now()は、メッセージ「Trailingdata」でInvalidArgumentExceptionをスローします

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での使用が望ましいでしょう。

7
Rich Jenks

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')だけでなく、フォームでもそのようにする必要がある場合があります。

2
1N5818

データベースが次のような10進数のマイクロタイムで日付値を返している場合、このエラーが発生します。

2016-10-06 20:16:23.96034

これらの余分な10進数が問題です。それらを削除すると、機能するはずです。

1
pbarney

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'と同じにすると、例外がなくなります。これがお役に立てば幸いです。

1
Gengjun Wu

環境ハンドラーの日付が異なるため、私は常にこの問題を抱えています。これでカーボンでデートをやめました。

public function getDates() { return []; }

0
Pablo Papalardo

末尾のタイムゾーンデータを含む日付の操作は、Eloquentアクセサーを使用してその末尾のデータを削除することで修正されます。

public function getTimestampColumnAttribute()
{
    return Carbon::createFromFormat($this->dateFormat, strtok($this->attributes['timestamp_column'], '.'));
}
0
AVProgrammer