Skip to content

Commit

Permalink
Merge pull request #635 from DirectoryTree/BUG-634
Browse files Browse the repository at this point in the history
Bug 634 - Relation::setModelResolver in AppServiceProvider no longer works in v3
  • Loading branch information
stevebauman authored Sep 8, 2023
2 parents 91a9d9c + 13e57d9 commit 1d484b3
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 10 deletions.
15 changes: 5 additions & 10 deletions src/Models/Relations/Relation.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,6 @@ public function __construct(Builder $query, Model $parent, array|string $related
$this->relationKey = $relationKey;
$this->foreignKey = $foreignKey;

static::$modelResolver = function (array $modelObjectClasses, array $relationMap) {
return array_search($modelObjectClasses, $relationMap);
};

$this->initRelation();
}

Expand Down Expand Up @@ -333,12 +329,11 @@ protected function determineModelFromRelated(Model $model, array $relationMap):
$model->getObjectClasses()
);

return call_user_func(
static::$modelResolver,
$modelObjectClasses,
$relationMap,
$model,
);
$resolver = static::$modelResolver ?? function (array $modelObjectClasses, array $relationMap) {
return array_search($modelObjectClasses, $relationMap);
};

return call_user_func($resolver, $modelObjectClasses, $relationMap, $model);
}

/**
Expand Down
21 changes: 21 additions & 0 deletions tests/Unit/Models/ModelRelationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,27 @@ public function test_related_models_are_determined_with_out_of_order_object_clas

$this->assertInstanceOf(RelatedModelTestStub::class, $relation->first());
}

public function test_related_models_can_be_resolved_with_resolver_callback()
{
$relation = (new ModelRelationTestStub())->relation();

$related = new Entry();

$related->objectclass = ['bar', 'foo'];
$related->setDn('cn=foo,dc=local,dc=com');

$relation->setResults([$related]);

Relation::resolveModelsUsing(function (array $modelObjectClasses, array $relationMap) use ($related) {
$this->assertEquals($related->getObjectClasses(), $modelObjectClasses);
$this->assertEquals([RelatedModelTestStub::class => $related->getObjectClasses()], $relationMap);

return array_search($modelObjectClasses, $relationMap);
});

$relation->first();
}
}

class RelationTestStub extends Relation
Expand Down

0 comments on commit 1d484b3

Please sign in to comment.