在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和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实例)似乎很奇怪,但不是这样。
虽然编辑3中的用法更合适!
答案 0 :(得分:2)
我发现你不应该使用createFromFormat
,除非第二个参数$date
也是碳物体,但是如果它不是,那么它就是{&1;}只是一个你可以使用的字符串
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))
表示第二个参数必须是Carbon对象,因此您可能必须确保表单上的情况而不仅仅是date('Y-m-d')
,就像在PHP中一样。
答案 1 :(得分:1)
我正在关注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' 相同后,异常消失。我希望这会有所帮助。
答案 2 :(得分:1)
如果数据库返回带有十进制microtime的日期值,则会出现此错误:
2016-10-06 20:16:23.96034
那些额外的十进制数字是问题所在。删除它们,它应该工作。
答案 3 :(得分:0)
使用Eloquent访问器删除该尾随数据,可以纠正包含尾随时区数据的日期:
public function getTimestampColumnAttribute()
{
return Carbon::createFromFormat($this->dateFormat, strtok($this->attributes['timestamp_column'], '.'));
}
答案 4 :(得分:0)
我总是遇到这个问题,因为环境处理程序的日期不同。 我刚刚停止用碳追踪日期。.
public function getDates()
{
return [];
}
答案 5 :(得分:0)
仅在模型中使用
get_node("/root/World/Player").get_position()
否则
protected $dateFormat = ' H:i:s.Y-m-du';
答案 6 :(得分:-2)
只需下载碳源文件并替换到供应商的碳目录中即可。而已... https://github.com/briannesbitt/Carbon/releases