mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-17 17:47:13 +00:00
feat: add support for AsCollection and AsArrayObject casts (#1393)
* feat: add support for AsCollection and AsArrayObject casts * update changelog * improve tests * remove change * composer fix-style * snapshot --------- Co-authored-by: Barry vd. Heuvel <[email protected]> Co-authored-by: laravel-ide-helper <[email protected]>
This commit is contained in:
co-authored by
Barry vd. Heuvel
laravel-ide-helper
parent
cee441c87c
commit
341c0ab89f
@@ -16,6 +16,7 @@ All notable changes to this project will be documented in this file.
|
|||||||
- Add support for real-time facades in the helper file. [#1455 / filipac](https://github.com/barryvdh/laravel-ide-helper/pull/1455)
|
- Add support for real-time facades in the helper file. [#1455 / filipac](https://github.com/barryvdh/laravel-ide-helper/pull/1455)
|
||||||
- Add support for relations with composite keys. [#1479 / calebdw](https://github.com/barryvdh/laravel-ide-helper/pull/1479)
|
- Add support for relations with composite keys. [#1479 / calebdw](https://github.com/barryvdh/laravel-ide-helper/pull/1479)
|
||||||
- Add support for attribute accessors with no backing field or type hinting [#1411 / pindab0ter](https://github.com/barryvdh/laravel-ide-helper/pull/1411).
|
- Add support for attribute accessors with no backing field or type hinting [#1411 / pindab0ter](https://github.com/barryvdh/laravel-ide-helper/pull/1411).
|
||||||
|
- Add support for AsCollection and AsArrayObject casts [#1393 / pataar](https://github.com/barryvdh/laravel-ide-helper/pull/1393)
|
||||||
|
|
||||||
2024-02-05, 2.14.0
|
2024-02-05, 2.14.0
|
||||||
------------------
|
------------------
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ use Illuminate\Console\Command;
|
|||||||
use Illuminate\Contracts\Database\Eloquent\Castable;
|
use Illuminate\Contracts\Database\Eloquent\Castable;
|
||||||
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
|
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
|
||||||
use Illuminate\Contracts\Database\Eloquent\CastsInboundAttributes;
|
use Illuminate\Contracts\Database\Eloquent\CastsInboundAttributes;
|
||||||
|
use Illuminate\Database\Eloquent\Casts\AsArrayObject;
|
||||||
|
use Illuminate\Database\Eloquent\Casts\AsCollection;
|
||||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -419,9 +421,13 @@ class ModelsCommand extends Command
|
|||||||
case 'immutable_datetime':
|
case 'immutable_datetime':
|
||||||
$realType = '\Carbon\CarbonImmutable';
|
$realType = '\Carbon\CarbonImmutable';
|
||||||
break;
|
break;
|
||||||
|
case AsCollection::class:
|
||||||
case 'collection':
|
case 'collection':
|
||||||
$realType = '\Illuminate\Support\Collection';
|
$realType = '\Illuminate\Support\Collection';
|
||||||
break;
|
break;
|
||||||
|
case AsArrayObject::class:
|
||||||
|
$realType = '\ArrayObject';
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
// In case of an optional custom cast parameter , only evaluate
|
// In case of an optional custom cast parameter , only evaluate
|
||||||
// the `$type` until the `:`
|
// the `$type` until the `:`
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Casts\AsArrayObject;
|
||||||
|
use Illuminate\Database\Eloquent\Casts\AsCollection;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class AdvancedCast extends Model
|
||||||
|
{
|
||||||
|
protected $casts = [
|
||||||
|
'cast_to_date_serialization' => 'date:Y-m-d',
|
||||||
|
'cast_to_datetime_serialization' => 'datetime:Y-m-d H:i:s',
|
||||||
|
'cast_to_custom_datetime' => 'custom_datetime:Y-m-d H:i:s',
|
||||||
|
'cast_to_immutable_date' => 'immutable_date',
|
||||||
|
'cast_to_immutable_custom_datetime' => 'immutable_custom_datetime:Y-m-d H:i:s',
|
||||||
|
'cast_to_immutable_datetime' => 'immutable_datetime',
|
||||||
|
'cast_to_timestamp' => 'timestamp',
|
||||||
|
'cast_to_encrypted' => 'encrypted',
|
||||||
|
'cast_to_encrypted_array' => 'encrypted:array',
|
||||||
|
'cast_to_encrypted_collection' => 'encrypted:collection',
|
||||||
|
'cast_to_encrypted_json' => 'encrypted:json',
|
||||||
|
'cast_to_encrypted_object' => 'encrypted:object',
|
||||||
|
'cast_to_as_collection' => AsCollection::class,
|
||||||
|
'cast_to_as_array_object' => AsArrayObject::class,
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts;
|
||||||
|
|
||||||
|
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
|
||||||
|
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
|
||||||
|
use Illuminate\Foundation\Application;
|
||||||
|
|
||||||
|
class Test extends AbstractModelsCommand
|
||||||
|
{
|
||||||
|
public function test(): void
|
||||||
|
{
|
||||||
|
if (!version_compare(Application::VERSION, '8.28', '>=')) {
|
||||||
|
$this->markTestSkipped(
|
||||||
|
'This test only works in Laravel >= 8.28'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$command = $this->app->make(ModelsCommand::class);
|
||||||
|
|
||||||
|
$tester = $this->runCommand($command, [
|
||||||
|
'--write' => true,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertSame(0, $tester->getStatusCode());
|
||||||
|
$this->assertStringContainsString('Written new phpDocBlock to', $tester->getDisplay());
|
||||||
|
$this->assertMatchesMockedSnapshot();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Casts\AsArrayObject;
|
||||||
|
use Illuminate\Database\Eloquent\Casts\AsCollection;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Models\AdvancedCast
|
||||||
|
*
|
||||||
|
* @property \Illuminate\Support\Carbon $cast_to_date_serialization
|
||||||
|
* @property \Illuminate\Support\Carbon $cast_to_datetime_serialization
|
||||||
|
* @property \Illuminate\Support\Carbon $cast_to_custom_datetime
|
||||||
|
* @property \Carbon\CarbonImmutable $cast_to_immutable_date
|
||||||
|
* @property \Carbon\CarbonImmutable $cast_to_immutable_custom_datetime
|
||||||
|
* @property \Carbon\CarbonImmutable $cast_to_immutable_datetime
|
||||||
|
* @property integer $cast_to_timestamp
|
||||||
|
* @property mixed $cast_to_encrypted
|
||||||
|
* @property array $cast_to_encrypted_array
|
||||||
|
* @property \Illuminate\Support\Collection $cast_to_encrypted_collection
|
||||||
|
* @property array $cast_to_encrypted_json
|
||||||
|
* @property object $cast_to_encrypted_object
|
||||||
|
* @property \Illuminate\Support\Collection $cast_to_as_collection
|
||||||
|
* @property \ArrayObject $cast_to_as_array_object
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast newModelQuery()
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast newQuery()
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast query()
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToAsArrayObject($value)
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToAsCollection($value)
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToCustomDatetime($value)
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToDateSerialization($value)
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToDatetimeSerialization($value)
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncrypted($value)
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncryptedArray($value)
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncryptedCollection($value)
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncryptedJson($value)
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncryptedObject($value)
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToImmutableCustomDatetime($value)
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToImmutableDate($value)
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToImmutableDatetime($value)
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToTimestamp($value)
|
||||||
|
* @mixin \Eloquent
|
||||||
|
*/
|
||||||
|
class AdvancedCast extends Model
|
||||||
|
{
|
||||||
|
protected $casts = [
|
||||||
|
'cast_to_date_serialization' => 'date:Y-m-d',
|
||||||
|
'cast_to_datetime_serialization' => 'datetime:Y-m-d H:i:s',
|
||||||
|
'cast_to_custom_datetime' => 'custom_datetime:Y-m-d H:i:s',
|
||||||
|
'cast_to_immutable_date' => 'immutable_date',
|
||||||
|
'cast_to_immutable_custom_datetime' => 'immutable_custom_datetime:Y-m-d H:i:s',
|
||||||
|
'cast_to_immutable_datetime' => 'immutable_datetime',
|
||||||
|
'cast_to_timestamp' => 'timestamp',
|
||||||
|
'cast_to_encrypted' => 'encrypted',
|
||||||
|
'cast_to_encrypted_array' => 'encrypted:array',
|
||||||
|
'cast_to_encrypted_collection' => 'encrypted:collection',
|
||||||
|
'cast_to_encrypted_json' => 'encrypted:json',
|
||||||
|
'cast_to_encrypted_object' => 'encrypted:object',
|
||||||
|
'cast_to_as_collection' => AsCollection::class,
|
||||||
|
'cast_to_as_array_object' => AsArrayObject::class,
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class AdvancedCastsTable extends Migration
|
||||||
|
{
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('advanced_casts', static function (Blueprint $table) {
|
||||||
|
$table->string('cast_to_date_serialization');
|
||||||
|
$table->string('cast_to_datetime_serialization');
|
||||||
|
$table->string('cast_to_custom_datetime');
|
||||||
|
$table->string('cast_to_immutable_date');
|
||||||
|
$table->string('cast_to_immutable_custom_datetime');
|
||||||
|
$table->string('cast_to_immutable_datetime');
|
||||||
|
$table->string('cast_to_timestamp');
|
||||||
|
$table->string('cast_to_encrypted');
|
||||||
|
$table->string('cast_to_encrypted_array');
|
||||||
|
$table->string('cast_to_encrypted_collection');
|
||||||
|
$table->string('cast_to_encrypted_json');
|
||||||
|
$table->string('cast_to_encrypted_object');
|
||||||
|
$table->string('cast_to_as_collection');
|
||||||
|
$table->string('cast_to_as_array_object');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user