Skip to content

Commit 98bc2f5

Browse files
authored
Merge pull request mongodb#1996 from stephandesouza/fix-embedsone-refresh
[3.x] Fix refresh() on EmbedsOne
2 parents 279b18c + a78d7ba commit 98bc2f5

File tree

2 files changed

+55
-6
lines changed

2 files changed

+55
-6
lines changed

src/Jenssegers/Mongodb/Relations/EmbedsOne.php

+9-6
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@
88

99
class EmbedsOne extends EmbedsOneOrMany
1010
{
11-
/**
12-
* @inheritdoc
13-
*/
11+
1412
public function initRelation(array $models, $relation)
1513
{
1614
foreach ($models as $model) {
@@ -20,14 +18,19 @@ public function initRelation(array $models, $relation)
2018
return $models;
2119
}
2220

23-
/**
24-
* @inheritdoc
25-
*/
2621
public function getResults()
2722
{
2823
return $this->toModel($this->getEmbedded());
2924
}
3025

26+
public function getEager()
27+
{
28+
$eager = $this->get();
29+
30+
// EmbedsOne only brings one result, Eager needs a collection!
31+
return $this->toCollection([$eager]);
32+
}
33+
3134
/**
3235
* Save a new model and attach it to the parent model.
3336
* @param Model $model

tests/EmbeddedRelationsTest.php

+46
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,36 @@ public function testEmbedsOneDelete()
614614
$this->assertNull($user->father);
615615
}
616616

617+
public function testEmbedsOneRefresh()
618+
{
619+
$user = User::create(['name' => 'John Doe']);
620+
$father = new User(['name' => 'Mark Doe']);
621+
622+
$user->father()->associate($father);
623+
$user->save();
624+
625+
$user->refresh();
626+
627+
$this->assertNotNull($user->father);
628+
$this->assertEquals('Mark Doe', $user->father->name);
629+
}
630+
631+
public function testEmbedsOneEmptyRefresh()
632+
{
633+
$user = User::create(['name' => 'John Doe']);
634+
$father = new User(['name' => 'Mark Doe']);
635+
636+
$user->father()->associate($father);
637+
$user->save();
638+
639+
$user->father()->dissociate();
640+
$user->save();
641+
642+
$user->refresh();
643+
644+
$this->assertNull($user->father);
645+
}
646+
617647
public function testEmbedsManyToArray()
618648
{
619649
/** @var User $user */
@@ -627,6 +657,22 @@ public function testEmbedsManyToArray()
627657
$this->assertIsArray($array['addresses']);
628658
}
629659

660+
public function testEmbedsManyRefresh()
661+
{
662+
/** @var User $user */
663+
$user = User::create(['name' => 'John Doe']);
664+
$user->addresses()->save(new Address(['city' => 'New York']));
665+
$user->addresses()->save(new Address(['city' => 'Paris']));
666+
$user->addresses()->save(new Address(['city' => 'Brussels']));
667+
668+
$user->refresh();
669+
670+
$array = $user->toArray();
671+
672+
$this->assertArrayHasKey('addresses', $array);
673+
$this->assertIsArray($array['addresses']);
674+
}
675+
630676
public function testEmbeddedSave()
631677
{
632678
/** @var User $user */

0 commit comments

Comments
 (0)