`$protected dates` 在 Eloquent 模型中完成了什么
What does `$protected dates` accomplish in Eloquent models
我正在编写一个简单的测试来评估保存已保存文章的未来发布日期。这就是我发送带有明天发布日期的数据的方式
$response = $this->putJson('/api/blogs/' . $blogPost->slug, [
'blog' => [
'publish' => true,
'publish_date' => Carbon::today()->addDays(1),
]
]);
$response->assertStatus(200);
在controller我保存如下
$blogData = $request->json()->all()['blog'];
$blog->fill($blogData);
$blog->save();
我在 运行 测试
时收到以下错误
[2020-02-13 09:42:11] local.ERROR: Unexpected data found.
Trailing data {"userId":6,"exception":"[object] (InvalidArgumentException(code: 0): Unexpected data found.
Trailing data at /Users/anadi/Code/website/adminpanel/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php:576)
[stacktrace]
#0 /Users/anadi/Code/website/adminpanel/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php(598): Carbon\Carbon::rawCreateFromFormat('Y-m-d H:i:s', '2020-02-14T00:0...', NULL)
#1 /Users/anadi/Code/website/adminpanel/vendor/laravel/framework/src/Illuminate/Support/DateFactory.php(217): Carbon\Carbon::createFromFormat('Y-m-d H:i:s', '2020-02-14T00:0...')
#2 /Users/anadi/Code/website/adminpanel/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(261): Illuminate\Support\DateFactory->__call('createFromForma...', Array)
#3 /Users/anadi/Code/website/adminpanel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(813): Illuminate\Support\Facades\Facade::__callStatic('createFromForma...', Array)
#4 /Users/anadi/Code/website/adminpanel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(835): Illuminate\Database\Eloquent\Model->asDateTime('2020-02-14T00:0...')
#5 /Users/anadi/Code/website/adminpanel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(580): Illuminate\Database\Eloquent\Model->fromDateTime('2020-02-14T00:0...')
#6 /Users/anadi/Code/website/adminpanel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(329): Illuminate\Database\Eloquent\Model->setAttribute('publish_date', '2020-02-14T00:0...')
#7 /Users/anadi/Code/website/adminpanel/app/Http/Controllers/BlogPostController.php(102): Illuminate\Database\Eloquent\Model->fill(Array)
当我删除
protected $dates = ['deleted_at','publish_date'];
从eloquent模型,不会出现这个错误。这让我想到了我的问题,上面这一行是做什么的?
实际上这一行将这些字段转换为 Carbon 对象,这将有助于 laravel 了解这些是日期字段。
例如 :
如果你在你的模型中写下这一行
受保护的 $dates = ['deleted_at','publish_date'];
您可以使用 $model->publish_date->format('d/m/Y') 来格式化日期。
我正在编写一个简单的测试来评估保存已保存文章的未来发布日期。这就是我发送带有明天发布日期的数据的方式
$response = $this->putJson('/api/blogs/' . $blogPost->slug, [
'blog' => [
'publish' => true,
'publish_date' => Carbon::today()->addDays(1),
]
]);
$response->assertStatus(200);
在controller我保存如下
$blogData = $request->json()->all()['blog'];
$blog->fill($blogData);
$blog->save();
我在 运行 测试
时收到以下错误[2020-02-13 09:42:11] local.ERROR: Unexpected data found.
Trailing data {"userId":6,"exception":"[object] (InvalidArgumentException(code: 0): Unexpected data found.
Trailing data at /Users/anadi/Code/website/adminpanel/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php:576)
[stacktrace]
#0 /Users/anadi/Code/website/adminpanel/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php(598): Carbon\Carbon::rawCreateFromFormat('Y-m-d H:i:s', '2020-02-14T00:0...', NULL)
#1 /Users/anadi/Code/website/adminpanel/vendor/laravel/framework/src/Illuminate/Support/DateFactory.php(217): Carbon\Carbon::createFromFormat('Y-m-d H:i:s', '2020-02-14T00:0...')
#2 /Users/anadi/Code/website/adminpanel/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(261): Illuminate\Support\DateFactory->__call('createFromForma...', Array)
#3 /Users/anadi/Code/website/adminpanel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(813): Illuminate\Support\Facades\Facade::__callStatic('createFromForma...', Array)
#4 /Users/anadi/Code/website/adminpanel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(835): Illuminate\Database\Eloquent\Model->asDateTime('2020-02-14T00:0...')
#5 /Users/anadi/Code/website/adminpanel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(580): Illuminate\Database\Eloquent\Model->fromDateTime('2020-02-14T00:0...')
#6 /Users/anadi/Code/website/adminpanel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(329): Illuminate\Database\Eloquent\Model->setAttribute('publish_date', '2020-02-14T00:0...')
#7 /Users/anadi/Code/website/adminpanel/app/Http/Controllers/BlogPostController.php(102): Illuminate\Database\Eloquent\Model->fill(Array)
当我删除
protected $dates = ['deleted_at','publish_date'];
从eloquent模型,不会出现这个错误。这让我想到了我的问题,上面这一行是做什么的?
实际上这一行将这些字段转换为 Carbon 对象,这将有助于 laravel 了解这些是日期字段。 例如 : 如果你在你的模型中写下这一行 受保护的 $dates = ['deleted_at','publish_date']; 您可以使用 $model->publish_date->format('d/m/Y') 来格式化日期。