From 39a65e3a8912e77028c40b7027279b79bc42ed5e Mon Sep 17 00:00:00 2001 From: Gummibeer Date: Wed, 29 May 2019 08:28:58 +0200 Subject: [PATCH] fix nullable dates --- src/Traits/DetectsChanges.php | 13 +++++++++---- tests/DetectsChangesTest.php | 30 ++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/Traits/DetectsChanges.php b/src/Traits/DetectsChanges.php index 95d45848..f254a936 100644 --- a/src/Traits/DetectsChanges.php +++ b/src/Traits/DetectsChanges.php @@ -121,12 +121,17 @@ public static function logChanges(Model $model): array foreach ($attributes as $attribute) { if (Str::contains($attribute, '.')) { $changes += self::getRelatedModelAttributeValue($model, $attribute); - } elseif (in_array($attribute, $model->getDates())) { - $changes[$attribute] = $model->serializeDate( - $model->asDateTime($model->getAttribute($attribute)) - ); } else { $changes[$attribute] = $model->getAttribute($attribute); + + if ( + in_array($attribute, $model->getDates()) + && ! is_null($changes[$attribute]) + ) { + $changes[$attribute] = $model->serializeDate( + $model->asDateTime($changes[$attribute]) + ); + } } } diff --git a/tests/DetectsChangesTest.php b/tests/DetectsChangesTest.php index cc5c6e73..37db532a 100644 --- a/tests/DetectsChangesTest.php +++ b/tests/DetectsChangesTest.php @@ -902,6 +902,36 @@ public function setAttribute($key, $value) $this->assertEquals($expectedChanges, $this->getLastActivity()->changes()->toArray()); } + /** @test */ + public function it_can_use_nullable_date_as_loggable_attributes() + { + $userClass = new class() extends User { + protected $fillable = ['name', 'text']; + protected static $logAttributes = ['*']; + + use LogsActivity, SoftDeletes; + }; + + Carbon::setTestNow(Carbon::create(2017, 1, 1, 12, 0, 0)); + $user = new $userClass(); + $user->name = 'my name'; + $user->text = 'my text'; + $user->save(); + + $expectedChanges = [ + 'attributes' => [ + 'id' => $user->getKey(), + 'name' => 'my name', + 'text' => 'my text', + 'created_at' => '2017-01-01 12:00:00', + 'updated_at' => '2017-01-01 12:00:00', + 'deleted_at' => null, + ], + ]; + + $this->assertEquals($expectedChanges, $this->getLastActivity()->changes()->toArray()); + } + protected function createArticle(): Article { $article = new $this->article();