diff --git a/src/Jenssegers/Mongodb/Relations/EmbedsOne.php b/src/Jenssegers/Mongodb/Relations/EmbedsOne.php index a0e713bc1..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,14 +18,19 @@ public function initRelation(array $models, $relation) return $models; } - /** - * @inheritdoc - */ public function getResults() { return $this->toModel($this->getEmbedded()); } + 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 */