Skip to content

Commit e1c6e53

Browse files
authored
Merge pull request #1454 from RomM1/queueable-relationships
fix serialize embedded relationships
2 parents 657da13 + fa045ae commit e1c6e53

File tree

3 files changed

+77
-0
lines changed

3 files changed

+77
-0
lines changed

src/Jenssegers/Mongodb/Eloquent/Model.php

+48
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
use Jenssegers\Mongodb\Query\Builder as QueryBuilder;
1212
use MongoDB\BSON\ObjectID;
1313
use MongoDB\BSON\UTCDateTime;
14+
use Illuminate\Contracts\Queue\QueueableEntity;
15+
use Illuminate\Contracts\Queue\QueueableCollection;
1416

1517
abstract class Model extends BaseModel
1618
{
@@ -420,6 +422,52 @@ protected function removeTableFromKey($key)
420422
return $key;
421423
}
422424

425+
/**
426+
* Get the queueable relationships for the entity.
427+
*
428+
* @return array
429+
*/
430+
public function getQueueableRelations()
431+
{
432+
$relations = [];
433+
434+
foreach ($this->getRelationsWithoutParent() as $key => $relation) {
435+
if (method_exists($this, $key)) {
436+
$relations[] = $key;
437+
}
438+
439+
if ($relation instanceof QueueableCollection) {
440+
foreach ($relation->getQueueableRelations() as $collectionValue) {
441+
$relations[] = $key.'.'.$collectionValue;
442+
}
443+
}
444+
445+
if ($relation instanceof QueueableEntity) {
446+
foreach ($relation->getQueueableRelations() as $entityKey => $entityValue) {
447+
$relations[] = $key.'.'.$entityValue;
448+
}
449+
}
450+
}
451+
452+
return array_unique($relations);
453+
}
454+
455+
/**
456+
* Get loaded relations for the instance without parent.
457+
*
458+
* @return array
459+
*/
460+
protected function getRelationsWithoutParent()
461+
{
462+
$relations = $this->getRelations();
463+
464+
if ($parentRelation = $this->getParentRelation()) {
465+
unset($relations[$parentRelation->getQualifiedForeignKeyName()]);
466+
}
467+
468+
return $relations;
469+
}
470+
423471
/**
424472
* @inheritdoc
425473
*/

src/Jenssegers/Mongodb/Relations/EmbedsOneOrMany.php

+10
Original file line numberDiff line numberDiff line change
@@ -393,4 +393,14 @@ public static function getUpdateValues($array, $prepend = '')
393393

394394
return $results;
395395
}
396+
397+
/**
398+
* Get the foreign key for the relationship.
399+
*
400+
* @return string
401+
*/
402+
public function getQualifiedForeignKeyName()
403+
{
404+
return $this->foreignKey;
405+
}
396406
}

tests/EmbeddedRelationsTest.php

+19
Original file line numberDiff line numberDiff line change
@@ -765,4 +765,23 @@ public function testPaginateEmbedsMany()
765765
$this->assertEquals(2, $results->count());
766766
$this->assertEquals(3, $results->total());
767767
}
768+
769+
public function testGetQueueableRelationsEmbedsMany()
770+
{
771+
$user = User::create(['name' => 'John Doe']);
772+
$user->addresses()->save(new Address(['city' => 'New York']));
773+
$user->addresses()->save(new Address(['city' => 'Paris']));
774+
775+
$this->assertEquals(['addresses'], $user->getQueueableRelations());
776+
$this->assertEquals([], $user->addresses->getQueueableRelations());
777+
}
778+
779+
public function testGetQueueableRelationsEmbedsOne()
780+
{
781+
$user = User::create(['name' => 'John Doe']);
782+
$user->father()->save(new User(['name' => 'Mark Doe']));
783+
784+
$this->assertEquals(['father'], $user->getQueueableRelations());
785+
$this->assertEquals([], $user->father->getQueueableRelations());
786+
}
768787
}

0 commit comments

Comments
 (0)