mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-18 01:57:13 +00:00
Created a positiblity to add custom relation type (#987)
* Created a positiblity to add custom relation type * Changed access modifier Co-authored-by: Markus Podar <[email protected]> * fixed hints from code review * Added Test for https://github.com/barryvdh/laravel-ide-helper/pull/987 * composer fix-style * Clarify doc in config entry * Update CHANGELOG.md Co-authored-by: Markus Podar <[email protected]>
This commit is contained in:
@@ -19,6 +19,16 @@ use Composer\Autoload\ClassMapGenerator;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
|
||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||
use Illuminate\Database\Eloquent\Relations\HasOneThrough;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphOne;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphToMany;
|
||||
use Illuminate\Database\Eloquent\Relations\Relation;
|
||||
use Illuminate\Filesystem\Filesystem;
|
||||
use Illuminate\Support\Str;
|
||||
@@ -36,6 +46,20 @@ use Symfony\Component\Console\Output\OutputInterface;
|
||||
*/
|
||||
class ModelsCommand extends Command
|
||||
{
|
||||
protected const RELATION_TYPES = [
|
||||
'hasMany' => HasMany::class,
|
||||
'hasManyThrough' => HasManyThrough::class,
|
||||
'hasOneThrough' => HasOneThrough::class,
|
||||
'belongsToMany' => BelongsToMany::class,
|
||||
'hasOne' => HasOne::class,
|
||||
'belongsTo' => BelongsTo::class,
|
||||
'morphOne' => MorphOne::class,
|
||||
'morphTo' => MorphTo::class,
|
||||
'morphMany' => MorphMany::class,
|
||||
'morphToMany' => MorphToMany::class,
|
||||
'morphedByMany' => MorphToMany::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* @var Filesystem $files
|
||||
*/
|
||||
@@ -561,19 +585,7 @@ class ModelsCommand extends Command
|
||||
$code = substr($code, $begin, strrpos($code, '}') - $begin + 1);
|
||||
|
||||
foreach (
|
||||
[
|
||||
'hasMany' => '\Illuminate\Database\Eloquent\Relations\HasMany',
|
||||
'hasManyThrough' => '\Illuminate\Database\Eloquent\Relations\HasManyThrough',
|
||||
'hasOneThrough' => '\Illuminate\Database\Eloquent\Relations\HasOneThrough',
|
||||
'belongsToMany' => '\Illuminate\Database\Eloquent\Relations\BelongsToMany',
|
||||
'hasOne' => '\Illuminate\Database\Eloquent\Relations\HasOne',
|
||||
'belongsTo' => '\Illuminate\Database\Eloquent\Relations\BelongsTo',
|
||||
'morphOne' => '\Illuminate\Database\Eloquent\Relations\MorphOne',
|
||||
'morphTo' => '\Illuminate\Database\Eloquent\Relations\MorphTo',
|
||||
'morphMany' => '\Illuminate\Database\Eloquent\Relations\MorphMany',
|
||||
'morphToMany' => '\Illuminate\Database\Eloquent\Relations\MorphToMany',
|
||||
'morphedByMany' => '\Illuminate\Database\Eloquent\Relations\MorphToMany',
|
||||
] as $relation => $impl
|
||||
$this->getRelationTypes() as $relation => $impl
|
||||
) {
|
||||
$search = '$this->' . $relation . '(';
|
||||
if (stripos($code, $search) || ltrim($impl, '\\') === ltrim((string)$type, '\\')) {
|
||||
@@ -600,14 +612,6 @@ class ModelsCommand extends Command
|
||||
get_class($relationObj->getRelated())
|
||||
);
|
||||
|
||||
$relations = [
|
||||
'hasManyThrough',
|
||||
'belongsToMany',
|
||||
'hasMany',
|
||||
'morphMany',
|
||||
'morphToMany',
|
||||
'morphedByMany',
|
||||
];
|
||||
if (strpos(get_class($relationObj), 'Many') !== false) {
|
||||
//Collection or array of models (because Collection is Arrayable)
|
||||
$relatedClass = '\\' . get_class($relationObj->getRelated());
|
||||
@@ -929,6 +933,15 @@ class ModelsCommand extends Command
|
||||
return '\\' . get_class($model->newCollection());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the available relation types
|
||||
*/
|
||||
protected function getRelationTypes(): array
|
||||
{
|
||||
$configuredRelations = $this->laravel['config']->get('ide-helper.additional_relation_types', []);
|
||||
return array_merge(self::RELATION_TYPES, $configuredRelations);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user