2015-04-05 37 views
6

當運行在Laravel工匠廷克如下:碳碳::現在()拋出與消息 '尾隨數據' InvalidArgumentException

$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'];突變爲碳實例,它也包含在protected $fillable中。

任何人都知道這裏發生了什麼事或我如何解決?


編輯:同樣的事情發生時,在路線封閉運行,所以不特定廷克

編輯2:兩次徵求意見https://laracasts.com/series/laravel-5-fundamentals/episodes/8

https://laracasts.com/discuss/channels/general-discussion/carboncarbonnow-giving-error和:看起來像其他人也遇到這種編輯3:與第一個例子幾乎完全相同的代碼在15:33時在https://laracasts.com/series/laravel-5-fundamentals/episodes/15中使用,沒有錯誤。

編輯4:上面代碼的第2行換到$article->published_at = Carbon::now()->format('Y-m-d');工作正常,甚至包括存儲在數據庫中的時間(雖然不知道爲什麼)。

我猜想「尾隨數據」可能指的是完整的日期時間太長,但看起來很奇怪,Laravel自動對日期時間做了很多事情(例如自動轉換爲Carbon實例),但不是這樣。

編輯3中的使用將是可取的,但!

+0

看起來像一個常規的DateTime錯誤,但它不應該用'now()'方法發生。你的時區設置有什麼錯誤嗎? config/app.php中的時區配置是什麼樣的? – kajetons 2015-04-05 18:27:12

+0

時區是默認值:''timezone'=>'UTC',' – 2015-04-05 18:31:28

+0

通過查看源代碼,它看起來像它不會越過這條線返回新的DateTimeZone(date_default_timezone_get());'在課堂建設。如果這不會引導你到任何地方,我懷疑除了使用本地日期函數外你可以做任何事情。 – kajetons 2015-04-05 18:43:30

回答

-1

只是刪除這個功能:

public function setPublishedAtAttribute($date){ 
    $this->attributes['published_at']=Carbon::createFromFormat('Y-m-d',$date); 
} 

監守那修爲已經published_at領域的格式...

2

我發現,你應該不應該使用createFromFormat,除非第二paramater $date是也是碳的對象,但如果它不是,它只是一個字符串,你可以使用

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))

表明,第二個參數必須是一個碳對象,所以你可能要作出肯定的是這種情況在表單上,​​而不是像在PHP中那樣只是date('Y-m-d')

1

我在跟着Laracast教程,我遇到了同樣的錯誤。我終於明白這個例外有什麼問題。

在功能:

public function setPublishedAtAttribute($date) 
{ 
    $this->attributes['published_at'] = Carbon::createFromFormat('Y-m-d', $date); 
} 

發現我的$日期格式爲'YMD'

然而,在我create.blade.php和edit.blade.php,形式輸入:

{!! Form::input('data-date', 'published_at', date('d-m-Y'), ['class' => 'form-control']) !!} 

注意到,我的日期格式爲'DMY'

這就是Laravel拋出異常的原因。

將日期格式與所有文件中的'Y-m-d'相同後,異常消失。我希望這有幫助。

0

如果數據庫是用這樣的小數microtime中返回的日期值,您將收到此錯誤:

2016-10-06 20:16:23.96034

這些額外十進制數字都是問題。刪除這些,它應該工作。