Implement new config to specify return type of custom relations (#1300)

* Implement new config to specify return type of custom relations

* Apply suggestions from code review

Co-authored-by: Markus Podar <[email protected]>

* add test for morphed

* fix test output

* add info about how to add custom relationships

* fix wording

Co-authored-by: Markus Podar <[email protected]>
This commit is contained in:
Jefemy
2022-05-22 20:07:54 +02:00
committed by GitHub
co-authored by Markus Podar
parent a567f73140
commit ee9188acf1
10 changed files with 167 additions and 2 deletions
+16 -2
View File
@@ -702,7 +702,10 @@ class ModelsCommand extends Command
get_class($relationObj->getRelated())
);
if (strpos(get_class($relationObj), 'Many') !== false) {
if (
strpos(get_class($relationObj), 'Many') !== false ||
($this->getRelationReturnTypes()[$relation] ?? '') === 'many'
) {
//Collection or array of models (because Collection is Arrayable)
$relatedClass = '\\' . get_class($relationObj->getRelated());
$collectionClass = $this->getCollectionClass($relatedClass);
@@ -726,7 +729,10 @@ class ModelsCommand extends Command
// What kind of comments should be added to the relation count here?
);
}
} elseif ($relation === 'morphTo') {
} elseif (
$relation === 'morphTo' ||
($this->getRelationReturnTypes()[$relation] ?? '') === 'morphTo'
) {
// Model isn't specified because relation is polymorphic
$this->setProperty(
$method,
@@ -1074,6 +1080,14 @@ class ModelsCommand extends Command
return array_merge(self::RELATION_TYPES, $configuredRelations);
}
/**
* Returns the return types of relations
*/
protected function getRelationReturnTypes(): array
{
return $this->laravel['config']->get('ide-helper.additional_relation_return_types', []);
}
/**
* @return bool
*/