Support AsCollection::of($map), AsCollection::using($class, $map) (#1714)

* Support `AsCollection::of($map)`, `AsCollection::using($class, $map)`

* test compatibility(`of($map)`,`using($class, $map)` compiled), only laravel `>=12.10`
This commit is contained in:
erikn69
2025-07-17 07:23:52 +02:00
committed by GitHub
parent 1815a6140a
commit 6c4ba2ad38
4 changed files with 34 additions and 1 deletions
+5 -1
View File
@@ -475,7 +475,11 @@ class ModelsCommand extends Command
}
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)) {
@@ -0,0 +1,21 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Collections;
use Illuminate\Contracts\Support\Arrayable;
use JsonSerializable;
class AdvancedCastMap implements Arrayable, JsonSerializable
{
public function toArray(): array
{
return [];
}
public function jsonSerialize(): array
{
return $this->toArray();
}
}
@@ -5,6 +5,7 @@ declare(strict_types=1);
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 @@ class AdvancedCast extends Model
'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,
@@ -5,6 +5,7 @@ declare(strict_types=1);
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 @@ use Illuminate\Database\Eloquent\Model;
* @property \Illuminate\Support\Collection $cast_to_as_collection
* @property \Illuminate\Support\Collection $cast_to_as_enum_collection
* @property \Illuminate\Database\Eloquent\Casts\ArrayObject<array-key, mixed> $cast_to_as_array_object
* @property \Illuminate\Support\Collection<int, AdvancedCastMap> $cast_to_as_collection_of
* @property AdvancedCastCollection $cast_to_as_collection_using
* @property AdvancedCastCollection<int, AdvancedCastMap> $cast_to_as_collection_using_and_map
* @property \Illuminate\Support\Collection<int, AdvancedCastEnum> $cast_to_as_enum_collection_of
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast newQuery()
@@ -69,7 +72,9 @@ class AdvancedCast extends Model
'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,