From 89667a59a71c0e31263065a5cc31de6e3f832342 Mon Sep 17 00:00:00 2001 From: Stephan de Souza Date: Wed, 11 Mar 2020 14:29:31 -0300 Subject: [PATCH 1/2] Fix refresh() on EmbedsOne --- .../Mongodb/Relations/EmbedsOne.php | 11 +++++ tests/EmbeddedRelationsTest.php | 46 +++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/src/Jenssegers/Mongodb/Relations/EmbedsOne.php b/src/Jenssegers/Mongodb/Relations/EmbedsOne.php index a0e713bc1..d2a431850 100644 --- a/src/Jenssegers/Mongodb/Relations/EmbedsOne.php +++ b/src/Jenssegers/Mongodb/Relations/EmbedsOne.php @@ -28,6 +28,17 @@ public function getResults() return $this->toModel($this->getEmbedded()); } + /** + * @inheritdoc + */ + public function getEager() + { + $eager = $this->get(); + + // EmbedsOne only brings one result, Eager needs a collection! + return $this->toCollection([$eager]); + } + /** * Save a new model and attach it to the parent model. * @param Model $model diff --git a/tests/EmbeddedRelationsTest.php b/tests/EmbeddedRelationsTest.php index 23e2fae03..b2bbc3898 100644 --- a/tests/EmbeddedRelationsTest.php +++ b/tests/EmbeddedRelationsTest.php @@ -614,6 +614,36 @@ public function testEmbedsOneDelete() $this->assertNull($user->father); } + public function testEmbedsOneRefresh() + { + $user = User::create(['name' => 'John Doe']); + $father = new User(['name' => 'Mark Doe']); + + $user->father()->associate($father); + $user->save(); + + $user->refresh(); + + $this->assertNotNull($user->father); + $this->assertEquals('Mark Doe', $user->father->name); + } + + public function testEmbedsOneEmptyRefresh() + { + $user = User::create(['name' => 'John Doe']); + $father = new User(['name' => 'Mark Doe']); + + $user->father()->associate($father); + $user->save(); + + $user->father()->dissociate(); + $user->save(); + + $user->refresh(); + + $this->assertNull($user->father); + } + public function testEmbedsManyToArray() { /** @var User $user */ @@ -627,6 +657,22 @@ public function testEmbedsManyToArray() $this->assertIsArray($array['addresses']); } + public function testEmbedsManyRefresh() + { + /** @var User $user */ + $user = User::create(['name' => 'John Doe']); + $user->addresses()->save(new Address(['city' => 'New York'])); + $user->addresses()->save(new Address(['city' => 'Paris'])); + $user->addresses()->save(new Address(['city' => 'Brussels'])); + + $user->refresh(); + + $array = $user->toArray(); + + $this->assertArrayHasKey('addresses', $array); + $this->assertIsArray($array['addresses']); + } + public function testEmbeddedSave() { /** @var User $user */ From a78d7ba0a7a091d07fd0e3daac8e4b8a30af2d4f Mon Sep 17 00:00:00 2001 From: Stephan de Souza Date: Wed, 11 Mar 2020 19:51:11 -0300 Subject: [PATCH 2/2] Removing unnecessary dockblocks --- src/Jenssegers/Mongodb/Relations/EmbedsOne.php | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/Jenssegers/Mongodb/Relations/EmbedsOne.php b/src/Jenssegers/Mongodb/Relations/EmbedsOne.php index d2a431850..9de1a820e 100644 --- a/src/Jenssegers/Mongodb/Relations/EmbedsOne.php +++ b/src/Jenssegers/Mongodb/Relations/EmbedsOne.php @@ -8,9 +8,7 @@ class EmbedsOne extends EmbedsOneOrMany { - /** - * @inheritdoc - */ + public function initRelation(array $models, $relation) { foreach ($models as $model) { @@ -20,17 +18,11 @@ public function initRelation(array $models, $relation) return $models; } - /** - * @inheritdoc - */ public function getResults() { return $this->toModel($this->getEmbedded()); } - /** - * @inheritdoc - */ public function getEager() { $eager = $this->get();