Skip to content

Commit 085ca3e

Browse files
Compatible with Generics Eloquent Builder in Laravel 11.15 (#1591)
* feat: support generics eloquent builder * fix: required laravel version * fix: ci execution is only for Laravel-11 * docs: add CHANGELOG * docs: update supported Laravel versions and adjust output examples
1 parent ec61b82 commit 085ca3e

File tree

48 files changed

+1343
-1347
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1343
-1347
lines changed

.github/workflows/run-integration-tests.yml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,8 @@ jobs:
1919
strategy:
2020
fail-fast: false
2121
matrix:
22-
php: [8.3, 8.2, 8.1]
23-
laravel: [11.*, 10.*]
24-
exclude:
25-
- php: 8.1
26-
laravel: 11.*
22+
php: [8.3, 8.2]
23+
laravel: [^11.15]
2724

2825
name: P${{ matrix.php }} - Laravel${{ matrix.laravel }}
2926
steps:

.github/workflows/run-tests.yml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,9 @@ jobs:
2121
fail-fast: false
2222
matrix:
2323
os: [ubuntu-22.04, windows-2019]
24-
php: [8.3, 8.2, 8.1]
25-
laravel: [10.*, 11.*]
24+
php: [8.3, 8.2]
25+
laravel: [^11.15]
2626
stability: [prefer-lowest, prefer-stable]
27-
exclude:
28-
- php: 8.1
29-
laravel: 11.*
3027
steps:
3128
- name: Set git to use LF
3229
if: ${{ matrix.os == 'windows-2019' }}

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ All notable changes to this project will be documented in this file.
99
- Fix type of hashed model property to `string`
1010

1111
### Changed
12+
- Add support for EloquentBuilder generics introduced in Laravel 11.15.
13+
- Drop support for Laravel versions earlier than 11.15.
1214

1315
### Added
1416

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,11 +169,11 @@ php artisan ide-helper:models "App\Models\Post"
169169
* @property \Illuminate\Support\Carbon $updated_at
170170
* @property-read \User $author
171171
* @property-read \Illuminate\Database\Eloquent\Collection|\Comment[] $comments
172-
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post newModelQuery()
173-
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post newQuery()
174-
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post query()
175-
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post whereTitle($value)
176-
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post forAuthors(\User ...$authors)
172+
* @method static \Illuminate\Database\Eloquent\Builder<static>|\App\Models\Post newModelQuery()
173+
* @method static \Illuminate\Database\Eloquent\Builder<static>|\App\Models\Post newQuery()
174+
* @method static \Illuminate\Database\Eloquent\Builder<static>|\App\Models\Post query()
175+
* @method static \Illuminate\Database\Eloquent\Builder<static>|\App\Models\Post whereTitle($value)
176+
* @method static \Illuminate\Database\Eloquent\Builder<static>|\App\Models\Post forAuthors(\User ...$authors)
177177
* …
178178
*/
179179
```

composer.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,24 @@
2020
}
2121
],
2222
"require": {
23-
"php": "^8.1",
23+
"php": "^8.2",
2424
"ext-json": "*",
2525
"barryvdh/reflection-docblock": "^2.1.2",
2626
"composer/class-map-generator": "^1.0",
27-
"illuminate/console": "^10 || ^11",
28-
"illuminate/database": "^10.38 || ^11",
29-
"illuminate/filesystem": "^10 || ^11",
30-
"illuminate/support": "^10 || ^11",
27+
"illuminate/console": "^11.15",
28+
"illuminate/database": "^11.15",
29+
"illuminate/filesystem": "^11.15",
30+
"illuminate/support": "^11.15",
3131
"nikic/php-parser": "^4.18 || ^5",
3232
"phpdocumentor/type-resolver": "^1.1.0"
3333
},
3434
"require-dev": {
3535
"ext-pdo_sqlite": "*",
3636
"friendsofphp/php-cs-fixer": "^3",
37-
"illuminate/config": "^9 || ^10 || ^11",
38-
"illuminate/view": "^9 || ^10 || ^11",
37+
"illuminate/config": "^11.15",
38+
"illuminate/view": "^11.15",
3939
"mockery/mockery": "^1.4",
40-
"orchestra/testbench": "^8 || ^9",
40+
"orchestra/testbench": "^9.2",
4141
"phpunit/phpunit": "^10.5",
4242
"spatie/phpunit-snapshot-assertions": "^4 || ^5",
4343
"vimeo/psalm": "^5.4"

src/Console/ModelsCommand.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ public function getPropertiesFromTable($model)
553553
$this->setMethod(
554554
Str::camel('where_' . $name),
555555
$this->getClassNameInDestinationFile($model, $builderClass)
556-
. '|'
556+
. '<static>|'
557557
. $this->getClassNameInDestinationFile($model, get_class($model)),
558558
['$value']
559559
);
@@ -632,14 +632,14 @@ public function getPropertiesFromMethods($model)
632632
new ReflectionClass($model),
633633
get_class($model)
634634
);
635-
$this->setMethod($name, $builder . '|' . $modelName, $args, $comment);
635+
$this->setMethod($name, $builder . '<static>|' . $modelName, $args, $comment);
636636
}
637637
} elseif (in_array($method, ['query', 'newQuery', 'newModelQuery'])) {
638638
$builder = $this->getClassNameInDestinationFile($model, get_class($model->newModelQuery()));
639639

640640
$this->setMethod(
641641
$method,
642-
$builder . '|' . $this->getClassNameInDestinationFile($model, get_class($model))
642+
$builder . '<static>|' . $this->getClassNameInDestinationFile($model, get_class($model))
643643
);
644644

645645
if ($this->write_model_external_builder_methods) {
@@ -905,7 +905,7 @@ public function getMethodType(Model $model, string $classType)
905905
{
906906
$modelName = $this->getClassNameInDestinationFile($model, get_class($model));
907907
$builder = $this->getClassNameInDestinationFile($model, $classType);
908-
return $builder . '|' . $modelName;
908+
return $builder . '<static>|' . $modelName;
909909
}
910910

911911
/**
@@ -1320,9 +1320,9 @@ protected function getSoftDeleteMethods($model)
13201320
if (in_array('Illuminate\\Database\\Eloquent\\SoftDeletes', $traits)) {
13211321
$modelName = $this->getClassNameInDestinationFile($model, get_class($model));
13221322
$builder = $this->getClassNameInDestinationFile($model, \Illuminate\Database\Eloquent\Builder::class);
1323-
$this->setMethod('withTrashed', $builder . '|' . $modelName, []);
1324-
$this->setMethod('withoutTrashed', $builder . '|' . $modelName, []);
1325-
$this->setMethod('onlyTrashed', $builder . '|' . $modelName, []);
1323+
$this->setMethod('withTrashed', $builder . '<static>|' . $modelName, []);
1324+
$this->setMethod('withoutTrashed', $builder . '<static>|' . $modelName, []);
1325+
$this->setMethod('onlyTrashed', $builder . '<static>|' . $modelName, []);
13261326
}
13271327
}
13281328

@@ -1526,7 +1526,7 @@ protected function writeModelExternalBuilderMethods(Model $model): void
15261526

15271527
$this->setMethod(
15281528
$builderMethod,
1529-
$builderClassBasedOnFQCNOption . '|' . $this->getClassNameInDestinationFile($model, get_class($model)),
1529+
$builderClassBasedOnFQCNOption . '<static>|' . $this->getClassNameInDestinationFile($model, get_class($model)),
15301530
$args
15311531
);
15321532
}

tests/Console/ModelsCommand/AdvancedCasts/__snapshots__/Test__test__1.php

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,24 @@
2727
* @property \Illuminate\Support\Collection $cast_to_as_collection
2828
* @property \Illuminate\Support\Collection $cast_to_as_enum_collection
2929
* @property \ArrayObject $cast_to_as_array_object
30-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast newModelQuery()
31-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast newQuery()
32-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast query()
33-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToAsArrayObject($value)
34-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToAsCollection($value)
35-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToAsEnumCollection($value)
36-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToCustomDatetime($value)
37-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToDateSerialization($value)
38-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToDatetimeSerialization($value)
39-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncrypted($value)
40-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncryptedArray($value)
41-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncryptedCollection($value)
42-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncryptedJson($value)
43-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncryptedObject($value)
44-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToImmutableCustomDatetime($value)
45-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToImmutableDate($value)
46-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToImmutableDatetime($value)
47-
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToTimestamp($value)
30+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast newModelQuery()
31+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast newQuery()
32+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast query()
33+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToAsArrayObject($value)
34+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToAsCollection($value)
35+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToAsEnumCollection($value)
36+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToCustomDatetime($value)
37+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToDateSerialization($value)
38+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToDatetimeSerialization($value)
39+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToEncrypted($value)
40+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToEncryptedArray($value)
41+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToEncryptedCollection($value)
42+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToEncryptedJson($value)
43+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToEncryptedObject($value)
44+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToImmutableCustomDatetime($value)
45+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToImmutableDate($value)
46+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToImmutableDatetime($value)
47+
* @method static \Illuminate\Database\Eloquent\Builder<static>|AdvancedCast whereCastToTimestamp($value)
4848
* @mixin \Eloquent
4949
*/
5050
class AdvancedCast extends Model

0 commit comments

Comments
 (0)