У меня есть модель с программным удалением и другим полем даты.
class BlogPost extends Model implements HasMedia
{
use SoftDeletes, HasSlug, HasMediaTrait, HasTags, Notifiable;
protected $dates = ['deleted_at', 'publish_date'];
protected $casts = [
'published' => 'boolean',
];
protected $attributes = [
'introduction' => 'Introduction',
'content' => 'Content',
'conclusion' => 'conclusion',
'published' => false,
'banner_image' => '/images/blog-banner-default.jpg',
];
protected $fillable = [
'title', 'introduction', 'content', 'conclusion', 'published', 'publish_date', 'banner_image'];
//other stuff
}
Я добавил метод контроллера, который можно использовать для всех обновлений этой модели
public function update(Request $request, BlogPost $blog)
{
$blogData = $request->json()->all()['blog'];
$blogPost = DB::transaction(function () use ($blog, $blogData) {
$blog->update($blogData);
return $blog;
});
return (new BlogPostResource($blogPost))->response()->setStatusCode(Response::HTTP_OK);
}
И я написал тест для определенного действия publi sh, подобного этому
public function testPublishNow()
{
$blogPost = factory(BlogPost::class)->create();
$updates = [
'blog' => [
'published' => true,
'publish_date' => '2020-03-25 15:00:00',
]
];
Passport::actingAs(factory(User::class)->create());
$response = $this->putJson("/api/blogs/" . $blogPost->slug, $updates);
$response->assertStatus(200);
$this->assertDatabaseHas('blog_posts',['published'=>true]);
$this->assertDatabaseHas('blog_posts',['publish_date'=>'2020-03-25 15:00:00']);
}
, который проходит без каких-либо ошибок, поэтому я предполагаю, что запрос на размещение в этом формате может быть обработан моим приложением. Однако, когда я вызываю этот метод обновления из Axios
, операция завершается неудачно
publishNow() {
let url = "/api/blogs/" + this.props.match.params.slug;
let today = moment().startOf('minute').format("YYYY-MM-DD HH:mm:ss");
Axios.put(url, { blog: { published: true, publish_date: today } })
.then(() => {
this.success();
})
.catch(error => {
this.failure(error);
});
}
Я получаю ошибку
[2020-03-23 17:46:33] local.ERROR: Trailing data {"userId":1,"exception":"[object] (InvalidArgumentException(code: 0): Trailing data at /Users/anadi/Code/adminpanel/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php:623)
[stacktrace]
#0 /Users/anadi/Code/adminpanel/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php(645): Carbon\\Carbon::rawCreateFromFormat('Y-m-d H:i:s', '2020-03-23 17:4...', NULL)
#1 /Users/anadi/Code/adminpanel/vendor/laravel/framework/src/Illuminate/Support/DateFactory.php(217): Carbon\\Carbon::createFromFormat('Y-m-d H:i:s', '2020-03-23 17:4...')
#2 /Users/anadi/Code/adminpanel/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(261): Illuminate\\Support\\DateFactory->__call('createFromForma...', Array)
#3 /Users/anadi/Code/adminpanel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(813): Illuminate\\Support\\Facades\\Facade::__callStatic('createFromForma...', Array)
#4 /Users/anadi/Code/adminpanel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(835): Illuminate\\Database\\Eloquent\\Model->asDateTime('2020-03-23 17:4...')
#5 /Users/anadi/Code/adminpanel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(1177): Illuminate\\Database\\Eloquent\\Model->fromDateTime('2020-03-23 17:4...')
#6 /Users/anadi/Code/adminpanel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(1138): Illuminate\\Database\\Eloquent\\Model->originalIsEquivalent('updated_at', '2020-03-23 17:4...')
замечаю originalIsEquivalent('updated_at', '2020-03-23 17:4...')
Я не был ' Я не сталкивался с этой проблемой, пока не использовал только временные метки, то есть
$table->timestamps();
вместо текущих
$table->timestampsTz();
, поэтому мой вопрос заключается в том, как сохранить временную зону меток времени, не нарушая работу приложения? Или, если сохранить их без часового пояса, автоматически отформатировать их в Asia/Kolkata
часовой пояс при получении?