diff --git a/src/Console/ModelsCommand.php b/src/Console/ModelsCommand.php index 1c82e9340..1cd7544c1 100644 --- a/src/Console/ModelsCommand.php +++ b/src/Console/ModelsCommand.php @@ -475,7 +475,11 @@ public function castPropertiesType($model) } if (Str::startsWith($type, AsCollection::class)) { - $realType = $this->getTypeInModel($model, $params[0] ?? null) ?? '\Illuminate\Support\Collection'; + $realType = $this->getTypeInModel($model, $params[0] ?? null) ?: '\Illuminate\Support\Collection'; + $relatedModel = $this->getTypeInModel($model, $params[1] ?? null); + if ($relatedModel) { + $realType = $this->getCollectionTypeHint($realType, $relatedModel); + } } if (Str::startsWith($type, AsEnumCollection::class)) { diff --git a/tests/Console/ModelsCommand/AdvancedCasts/Collections/AdvancedCastMap.php b/tests/Console/ModelsCommand/AdvancedCasts/Collections/AdvancedCastMap.php new file mode 100644 index 000000000..5dbd4e226 --- /dev/null +++ b/tests/Console/ModelsCommand/AdvancedCasts/Collections/AdvancedCastMap.php @@ -0,0 +1,21 @@ +toArray(); + } +} diff --git a/tests/Console/ModelsCommand/AdvancedCasts/Models/AdvancedCast.php b/tests/Console/ModelsCommand/AdvancedCasts/Models/AdvancedCast.php index 35ad6e290..1569da15a 100644 --- a/tests/Console/ModelsCommand/AdvancedCasts/Models/AdvancedCast.php +++ b/tests/Console/ModelsCommand/AdvancedCasts/Models/AdvancedCast.php @@ -5,6 +5,7 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Models; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Collections\AdvancedCastCollection; +use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Collections\AdvancedCastMap; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Enums\AdvancedCastEnum; use Illuminate\Database\Eloquent\Casts\AsArrayObject; use Illuminate\Database\Eloquent\Casts\AsCollection; @@ -29,7 +30,9 @@ protected function casts(): array 'cast_to_encrypted_json' => 'encrypted:json', 'cast_to_encrypted_object' => 'encrypted:object', 'cast_to_as_collection' => AsCollection::class, + 'cast_to_as_collection_of' => AsCollection::class . ':,' . AdvancedCastMap::class, // since 12.10 'cast_to_as_collection_using' => AsCollection::using(AdvancedCastCollection::class), + 'cast_to_as_collection_using_and_map' => AsCollection::class . ':' . AdvancedCastCollection::class. ',' . AdvancedCastMap::class, // since 12.10 'cast_to_as_enum_collection' => AsEnumCollection::class, 'cast_to_as_enum_collection_of' => AsEnumCollection::of(AdvancedCastEnum::class), 'cast_to_as_array_object' => AsArrayObject::class, diff --git a/tests/Console/ModelsCommand/AdvancedCasts/__snapshots__/Test__test__1.php b/tests/Console/ModelsCommand/AdvancedCasts/__snapshots__/Test__test__1.php index fbb6719f9..8e9019613 100644 --- a/tests/Console/ModelsCommand/AdvancedCasts/__snapshots__/Test__test__1.php +++ b/tests/Console/ModelsCommand/AdvancedCasts/__snapshots__/Test__test__1.php @@ -5,6 +5,7 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Models; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Collections\AdvancedCastCollection; +use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Collections\AdvancedCastMap; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Enums\AdvancedCastEnum; use Illuminate\Database\Eloquent\Casts\AsArrayObject; use Illuminate\Database\Eloquent\Casts\AsCollection; @@ -29,7 +30,9 @@ * @property \Illuminate\Support\Collection $cast_to_as_collection * @property \Illuminate\Support\Collection $cast_to_as_enum_collection * @property \Illuminate\Database\Eloquent\Casts\ArrayObject $cast_to_as_array_object + * @property \Illuminate\Support\Collection $cast_to_as_collection_of * @property AdvancedCastCollection $cast_to_as_collection_using + * @property AdvancedCastCollection $cast_to_as_collection_using_and_map * @property \Illuminate\Support\Collection $cast_to_as_enum_collection_of * @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast newQuery() @@ -69,7 +72,9 @@ protected function casts(): array 'cast_to_encrypted_json' => 'encrypted:json', 'cast_to_encrypted_object' => 'encrypted:object', 'cast_to_as_collection' => AsCollection::class, + 'cast_to_as_collection_of' => AsCollection::class . ':,' . AdvancedCastMap::class, // since 12.10 'cast_to_as_collection_using' => AsCollection::using(AdvancedCastCollection::class), + 'cast_to_as_collection_using_and_map' => AsCollection::class . ':' . AdvancedCastCollection::class. ',' . AdvancedCastMap::class, // since 12.10 'cast_to_as_enum_collection' => AsEnumCollection::class, 'cast_to_as_enum_collection_of' => AsEnumCollection::of(AdvancedCastEnum::class), 'cast_to_as_array_object' => AsArrayObject::class,