Compare commits

...
Author SHA1 Message Date
Barry vd. Heuvel 160c12d20f Update CHANGELOG.md 2024-07-12 16:20:20 +02:00
Barry vd. Heuvel 2dba19133c Fix style again (#1569) 2024-07-12 16:16:37 +02:00
schrosis 001091e605 fix: unknown format PHPDoc (#1538) 2024-07-12 16:09:08 +02:00
Barry vd. Heuvel ccac27c8cf Bump dev alias to 3.1 2024-07-12 16:08:33 +02:00
f5759e2001 Add static to isBuiltin() check in ide-helper:models (#1541)
* Add `\\static` as check

For some reason, the `static` keyword as a return type, does not return `isBuiltin()` === true, so a `\\` is added. We need to manually add it to the built in check.

* Update ModelsCommand.php

* Add tests

* Add CHANGELOG.md entry

---------

Co-authored-by: Markus Podar <[email protected]>
Co-authored-by: Barry vd. Heuvel <[email protected]>
2024-07-12 16:08:08 +02:00
michalandBarry vd. Heuvel f7a3dc8ff2 Add support in morphTo relationship for null values (1547) (#1549)
Co-authored-by: Barry vd. Heuvel <[email protected]>
2024-07-12 16:06:56 +02:00
Braunson YagerandBarry vd. Heuvel 672acce5ae feat: add support for AsEnumCollection casts (#1557)
* Adding support for casting to AsEnumCollection

* Adding missing string to advanced_casts table for enum_collection

* Added to snapshots and ArrayCastsWithComment

* Update CHANGELOG.md

* Reverted automated whitespace, strict changes

* Updated test snapshots, tests passing

* Whitespace revert

---------

Co-authored-by: Barry vd. Heuvel <[email protected]>
2024-07-12 16:03:57 +02:00
Benedikt Franke 67c00c0978 Improve config file (#1564)
* Improve config file

- Terminate all descriptions with a dot .
- Update outdated descriptions
- Add missing examples

* Fix capitalizations
2024-07-12 15:58:21 +02:00
Barry vd. Heuvel a1573919c1 Update CHANGELOG.md 2024-07-12 15:56:03 +02:00
Markus Podar 0cf178aca9 composer fix-style (#1558) 2024-07-12 15:53:54 +02:00
c6509b658f Improved attribute handling with types and Attribute support (#1567)
* Add `AllowDynamicProperties` Attribute to cooperate with php8.2 deprecation

* lint snapshot

* Fix collection attribute typing

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update composer.json

* Fix collectino with template types WIP

* Add `AllowDynamicProperties` Attribute to cooperate with php8.2 deprecation

* Fix collection attribute typing

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update composer.json

* composer fix-style

* Fix tests

* Fix tests

* composer fix-style

* Fix collectino with complex template types{

* Delete phpactor

* Install from scrumble repo

* Implemented correct attribute handling

* composer fix-style

* Revert "Install from scrumble repo"

This reverts commit 3f1057adb6.

* Re-add barryvdh links

* Revert "Update composer.json"

This reverts commit 98252fe740.

* Fix pivot test

* Correct CHANGELOG.md with attribute merge request

* More clear PhpDocTypeParser filename and clarified directory according to PSR12

---------

Co-authored-by: GeoSot <[email protected]>
Co-authored-by: laravel-ide-helper <[email protected]>
Co-authored-by: Luukdewaaier <[email protected]>
Co-authored-by: Luuk de Weijer <[email protected]>
2024-07-12 15:53:04 +02:00
sforward 6338abb2d7 Fix return value of scopes from parent class (#1366) 2024-04-01 08:43:59 +02:00
dev2a ac7e186270 Add pivot class property (#1518)
* Add pivot class property

* Add test for pivot class properties

* Fix failed test for pivot class properties

* Update CHANGELOG.md

* Fix failed test
2024-03-11 14:37:15 +01:00
Barry vd. Heuvel bc1d67f01c Prepare 3.0 release (#1530)
* Prepare 3.0 release

* Update CHANGELOG.md

* Update CHANGELOG.md
2024-03-01 13:53:18 +01:00
Markus Podar 8eab699835 phpunit --migrate-configuration (#1526) 2024-02-19 20:52:29 +01:00
Markus PodarandBarry vd. Heuvel 49ac75d805 Remove --smart-reset completely (#1525)
* Remove `--smart-reset` completely

See https://github.com/barryvdh/laravel-ide-helper/pull/1523#issuecomment-1952313183

* Update CHANGELOG.md

---------

Co-authored-by: Barry vd. Heuvel <[email protected]>
2024-02-19 14:03:16 +01:00
Barry vd. Heuvel 02af2a278a Merge reset/smart reset, don't set class (#1523)
* Merge reset/smart reset, don't set class

* Add changelog
2024-02-19 12:59:22 +01:00
Barry vd. Heuvel d7ed749f3e Use int/bool instead of longer variant (#1524)
* Use int/bool instead of longer variant

* Add changelog

* Update snapshots
2024-02-19 12:39:07 +01:00
Markus Podar 9af62e243d Bump minimum PHP version to 8.1 & misc maintenance (#1521)
* Bump minimum PHP version to 8.1

Laravel 10 doesn't support 8.0 anyway

* Remove phpunit 9

* gha: remove unused matrix dimension

* gha: bump runner os

* tests: remove outdated version checks
2024-02-17 22:08:15 +01:00
05259b695d Add support for Laravel 11 (#1520)
* update dependencies

* Implement new methods for `Authenticatable` contract

* Added Laravel 11 to CI test target

* normalize composer.json

* Remove obsolete migration method (column type) from test

* Update snapshots

* Add changelog entry

* Update readme

---------

Co-authored-by: 武田 憲太郎 <[email protected]>
Co-authored-by: barryvdh <[email protected]>
2024-02-17 11:32:56 +01:00
Barry vd. Heuvel 8bfe918f65 Update CHANGELOG.md 2024-02-17 11:27:21 +01:00
6579c0332b Remove doctrine (#1512)
* Remove doctrine

* Fix tests

* normalize composer.json

* Add back platform

* Bump integration versions

* composer fix-style

* Fix stability

* Bump minimum to 10.36

* Bump minimum to 10.38

* More types

* Fast fail off

* Bump docblock

* composer fix-style

* add bpchar

* Use match for type detection

Co-authored-by: Hafez Divandari <[email protected]>

* Use driverName

Co-authored-by: Hafez Divandari <[email protected]>

* fix match

* TWeak types

* Update snapshots

* Remove testbench 7

* composer fix-style

* Update src/Console/ModelsCommand.php

Co-authored-by: Hafez Divandari <[email protected]>

* Update src/Console/ModelsCommand.php

Co-authored-by: Hafez Divandari <[email protected]>

* Tweak bool

* Update src/Console/ModelsCommand.php

Co-authored-by: Hafez Divandari <[email protected]>

* composer fix-style

* Remove custom types, default to string

---------

Co-authored-by: barryvdh <[email protected]>
Co-authored-by: laravel-ide-helper <[email protected]>
Co-authored-by: Hafez Divandari <[email protected]>
2024-02-17 11:12:12 +01:00
Barry vd. Heuvel ed39977a30 Switch to 3.0 tag (#1519) 2024-02-17 11:11:50 +01:00
Markus Podar bcc233280b [TEST] Show that custom phpdoc tags without space afterwards are unexpectedly changed (#981)
* tests: show that custom phpdoc tags without space afterwards are unexpectedly changed

This adds a test for the (current bug) behaviour of https://github.com/barryvdh/laravel-ide-helper/issues/666

If this ever gets fixed, this fails and needs to be adapted,
ensuring it won't break again.

* test: adapt now that #666 has been fixed
2024-02-16 21:38:43 +01:00
Barry vd. Heuvel 77831852bb Fix final class keyword (#1517)
* Fix final class keyword

* Add changelog
2024-02-15 15:23:20 +01:00
Markus Podar b47a118300 Adjust gitattribute (#1515)
and make up for the missing php-cs-fixer changes

The rest of the changes is just:
- sorted alphabetically
- align the `export-ignore` column
2024-02-14 14:49:24 +01:00
Barry vd. HeuvelandMarkus Podar dca3ebe81e Prepare 2.15 release (#1514)
* Prepare 2.15 release

* Prepare 2.15 release

* Add missing CHANGELOG.md entries

---------

Co-authored-by: Markus Podar <[email protected]>
2024-02-14 12:19:26 +01:00
Barry vd. Heuvel c119e89cf0 CS 2024-02-08 11:11:51 +01:00
GeoSot bc158a1b86 Add AllowDynamicProperties Attribute to cooperate with php8.2 deprecation (#1428)
* Add `AllowDynamicProperties` Attribute to cooperate with php8.2 deprecation

* lint snapshot
2024-02-08 11:09:30 +01:00
341c0ab89f 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]>
2024-02-08 10:59:02 +01:00
Menthol cee441c87c Fix #1300 relation_return_type must take precedence if it is defined (#1394) 2024-02-08 09:48:26 +01:00
Barry vd. Heuvel 9343d3a1cc CS 2024-02-08 09:41:24 +01:00
f12d933ab1 Add support for non type-hinted attribute accessors with no backed property (#1411)
* Read Attribute type from parameter

* Update CHANGELOG.md

* Update ModelsCommand.php

---------

Co-authored-by: Barry vd. Heuvel <[email protected]>
Co-authored-by: Barry vd. Heuvel <[email protected]>
2024-02-08 09:39:10 +01:00
Norman Huth 4751420c9e Accept scope & scopes as relation (#1452) 2024-02-08 09:20:47 +01:00
Caleb White 6115100a0f Add support for composite keys (#1479)
* Add support for composite keys

* chore: add composite foreign key test
2024-02-08 07:42:27 +01:00
Sven 5c886fb653 Support the BINARY(...) database field type (#1434)
In singlestore we define some strings as
$table->char($columnName, 40)->charset('binary')->collation('binary');

In singelstore, this becomes 'BINARY(40)' instead of 'CHAR(40) CHARACTER SET 'binary' COLLATE 'binary'

This change would allow the generated proeperties to be 'string' instead of 'mixed', as using a string is correct in this case.
2024-02-07 22:01:48 +01:00
Barry vd. Heuvel 7d69dc6ea0 CS 2024-02-07 21:58:39 +01:00
Ben Poulson 62fc436c4c Reintroduce support for multi-db setups (#1426)
This snipet was lost in the 2.12.x => 2.13.x change. Needs to be reintroduced to allow those who use fully qualified db+table names. (Eg, `database.table`)
2024-02-07 21:55:16 +01:00
409bbf665b Fix unsetMethod in ModelsCommand (#1453)
* Fix unsetMethod in ModelsCommand

* composer fix-style

---------

Co-authored-by: Barry vd. Heuvel <[email protected]>
Co-authored-by: laravel-ide-helper <[email protected]>
2024-02-07 21:48:09 +01:00
Barry vd. Heuvel 2535f8e6ab Fix tests and CS 2024-02-07 21:44:48 +01:00
James Bhatta 16548fc878 Update README.md (#1451)
Fix intra page link for PHPDocs for models
2024-02-07 21:40:24 +01:00
Barry vd. Heuvel 872b470d9b Update CHANGELOG.md 2024-02-07 21:37:51 +01:00
95 changed files with 2300 additions and 848 deletions
+6 -6
View File
@@ -2,14 +2,14 @@
# https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html # https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
# Ignore all test and documentation with "export-ignore". # Ignore all test and documentation with "export-ignore".
/.editorconfig export-ignore
/.gitattributes export-ignore /.gitattributes export-ignore
/.github export-ignore /.github export-ignore
/.gitignore export-ignore /.gitignore export-ignore
/.editorconfig export-ignore /.php-cs-fixer.cache export-ignore
/.php-cs-fixer.php export-ignore
/.php-cs-fixer.tests.cache export-ignore
/phpunit.xml.dist export-ignore /phpunit.xml.dist export-ignore
/tests export-ignore
/.php_cs.common.php export-ignore
/.php_cs.dist export-ignore
/.php_cs.tests.php export-ignore
/psalm.xml export-ignore
/psalm-baseline.xml export-ignore /psalm-baseline.xml export-ignore
/psalm.xml export-ignore
/tests export-ignore
+1 -1
View File
@@ -9,7 +9,7 @@ on:
jobs: jobs:
normalize: normalize:
timeout-minutes: 15 timeout-minutes: 15
runs-on: ubuntu-20.04 runs-on: ubuntu-22.04
steps: steps:
- name: Git checkout - name: Git checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
+2 -2
View File
@@ -7,7 +7,7 @@ jobs:
fix-style: fix-style:
name: Fix Code Style name: Fix Code Style
timeout-minutes: 15 timeout-minutes: 15
runs-on: ubuntu-20.04 runs-on: ubuntu-22.04
env: env:
COMPOSER_NO_INTERACTION: 1 COMPOSER_NO_INTERACTION: 1
@@ -18,7 +18,7 @@ jobs:
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: 8.0 php-version: 8.3
coverage: none coverage: none
- name: Install dependencies - name: Install dependencies
+6 -7
View File
@@ -12,20 +12,19 @@ on:
jobs: jobs:
php-laravel-integration-tests: php-laravel-integration-tests:
runs-on: ubuntu-20.04 runs-on: ubuntu-22.04
timeout-minutes: 15 timeout-minutes: 15
env: env:
COMPOSER_NO_INTERACTION: 1 COMPOSER_NO_INTERACTION: 1
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
php: [8.3, 8.2, 8.1, 8.0] php: [8.3, 8.2, 8.1]
laravel: [10.*, 9.*] laravel: [11.*, 10.*]
exclude: exclude:
- php: 8.0 - php: 8.1
laravel: 10.* laravel: 11.*
- php: 8.3
laravel: 9.*
name: P${{ matrix.php }} - Laravel${{ matrix.laravel }} name: P${{ matrix.php }} - Laravel${{ matrix.laravel }}
steps: steps:
- name: Checkout code - name: Checkout code
+2 -2
View File
@@ -9,7 +9,7 @@ on:
jobs: jobs:
build: build:
timeout-minutes: 15 timeout-minutes: 15
runs-on: ubuntu-20.04 runs-on: ubuntu-22.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@@ -17,7 +17,7 @@ jobs:
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: 8.1 php-version: 8.3
coverage: none coverage: none
extensions: pdo_sqlite extensions: pdo_sqlite
+8 -9
View File
@@ -18,16 +18,15 @@ jobs:
COMPOSER_NO_INTERACTION: 1 COMPOSER_NO_INTERACTION: 1
strategy: strategy:
fail-fast: false
matrix: matrix:
os: [ubuntu-20.04, windows-2019] os: [ubuntu-22.04, windows-2019]
php: [8.3, 8.2, 8.1, 8.0] php: [8.3, 8.2, 8.1]
laravel: [9.*, 10.*] laravel: [10.*, 11.*]
dependency-version: [prefer-lowest, prefer-stable] stability: [prefer-lowest, prefer-stable]
exclude: exclude:
- php: 8.0 - php: 8.1
laravel: 10.* laravel: 11.*
- php: 8.0
dependency-version: prefer-lowest
steps: steps:
- name: Set git to use LF - name: Set git to use LF
if: ${{ matrix.os == 'windows-2019' }} if: ${{ matrix.os == 'windows-2019' }}
@@ -50,7 +49,7 @@ jobs:
composer remove vimeo/psalm --no-update --dev composer remove vimeo/psalm --no-update --dev
composer remove friendsofphp/php-cs-fixer --no-update --dev composer remove friendsofphp/php-cs-fixer --no-update --dev
composer require "laravel/framework:${{ matrix.laravel }}" --no-update --no-progress composer require "laravel/framework:${{ matrix.laravel }}" --no-update --no-progress
composer update --prefer-dist --no-progress composer update --prefer-dist --no-progress --${{ matrix.stability }}
- name: Execute Unit Tests - name: Execute Unit Tests
run: composer test-ci run: composer test-ci
+69 -5
View File
@@ -2,15 +2,80 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
[Next release](https://github.com/barryvdh/laravel-ide-helper/compare/v2.14.0...master) [Next release](https://github.com/barryvdh/laravel-ide-helper/compare/v3.1.0...master)
-------------- --------------
### Changed ### Fixed
- Removed support for Laravel 8 and therefore for PHP < 8.0 [#1504 / mfn](https://github.com/barryvdh/laravel-ide-helper/pull/1504)
### Changed
### Added
2024-07-12, 3.1.0
------------------
### Fixed
- Fix return value of query scopes from parent class [#1366 / sforward](https://github.com/barryvdh/laravel-ide-helper/pull/1366)
- Add static to isBuiltin() check in ide-helper:models [#1541 / bram-pkg](https://github.com/barryvdh/laravel-ide-helper/pull/1541)
- Fix for getSomethingAttribute functions which return a collection with type templating in the phpDoc. [#1567 / stefanScrumble](https://github.com/barryvdh/laravel-ide-helper/pull/1567)
### Added
- Add type to pivot when using a custom pivot class [#1518 / d3v2a](https://github.com/barryvdh/laravel-ide-helper/pull/1518)
- Add support in morphTo relationship for null values [#1547 / matysekmichal](https://github.com/barryvdh/laravel-ide-helper/pull/1547)
- Add support for AsEnumCollection casts [#1557 / Braunson](https://github.com/barryvdh/laravel-ide-helper/pull/1557)
- Support for Attribute class in attributes [#1567 / stefanScrumble](https://github.com/barryvdh/laravel-ide-helper/pull/1567)
2024-03-01, 3.0.0
------------------
### Added
- Support for Laravel 11 [#1520 / KentarouTakeda](https://github.com/barryvdh/laravel-ide-helper/pull/1520)
### Changed
- Make `--reset` always keep the text and remove `--smart-reset`. Always skip the classname [#1523 / barryvdh](https://github.com/barryvdh/laravel-ide-helper/pull/1523) & [#1525 / mfn](https://github.com/barryvdh/laravel-ide-helper/pull/1525)
- Use short types (`int` and `bool` instead of `integer` and `boolean`) [#1524 / barryvdh](https://github.com/barryvdh/laravel-ide-helper/pull/1524)
### Removed
- Support for Laravel 9 and use of doctrine/dbal [#1512 / barryvdh](https://github.com/barryvdh/laravel-ide-helper/pull/1512)
With this functionality gone, a few changes have been made:
- support for custom datatypes has been dropped (config `custom_db_types`) unknown data types default to `string` now and to fix the type, add a proper cast in Eloquent
- You _might_ have top-level dependency on doctrine/dbal. This may have been in the past due to ide-helper, we suggest to check if you still need it and remove it otherwise
- Minimum PHP version, due to Laravel 10, is now PHP 8.1
2024-02-15, 2.15.1
------------------
### Fixed
- Fix final class keyword in wrong position [#1517 / barryvdh](https://github.com/barryvdh/laravel-ide-helper/pull/1517)
### Changed
### Added
2024-02-14, 2.15.0
------------------
### Fixed
- Fix case issue in `ModelsCommand::unsetMethod()` [#1453 / leo108](https://github.com/barryvdh/laravel-ide-helper/pull/1453)
- Fix non-facade classes will result in no autocomplete [#841 / netpok](https://github.com/barryvdh/laravel-ide-helper/pull/841)
- Skip swoole, otherwise fatal error [#1477 / TimoFrenzel](https://github.com/barryvdh/laravel-ide-helper/pull/1477)
- Fix vulnerability CVE-2021-43608 [#1392 / allanlaal](https://github.com/barryvdh/laravel-ide-helper/pull/1392)
- Reset foreignKeyConstraintsColumns on model loop start [#1461 / snmatsui](https://github.com/barryvdh/laravel-ide-helper/pull/1461)
- Accept scope & scopes as relation [#1452 / Muetze42](https://github.com/barryvdh/laravel-ide-helper/pull/1452)
- Fix #1300 relation_return_type must take precedence if it is defined [#1394 / menthol](https://github.com/barryvdh/laravel-ide-helper/pull/1394)
### Changed
- Disable inspections of helper files [#1486 / eidng8](https://github.com/barryvdh/laravel-ide-helper/pull/1486)
- Removed support for Laravel 8 and therefore for PHP < 8.0 [#1504 / mfn](https://github.com/barryvdh/laravel-ide-helper/pull/1504)
### Added ### Added
- Add support for enum default arguments using enum cases. [#1464 / d8vjork](https://github.com/barryvdh/laravel-ide-helper/pull/1464) - Add support for enum default arguments using enum cases. [#1464 / d8vjork](https://github.com/barryvdh/laravel-ide-helper/pull/1464)
- 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 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)
- Reintroduce support for multi-db setups [#1426 / benpoulson](https://github.com/barryvdh/laravel-ide-helper/pull/1426)
- Support the BINARY(...) database field type [#1434 / Sfonxs](https://github.com/barryvdh/laravel-ide-helper/pull/1434)
- Add AllowDynamicProperties Attribute to cooperate with php8.2 deprecation [#1428 / GeoSot](https://github.com/barryvdh/laravel-ide-helper/pull/1428)
2024-02-05, 2.14.0 2024-02-05, 2.14.0
------------------ ------------------
@@ -20,13 +85,12 @@ All notable changes to this project will be documented in this file.
- Refactor resolving of null information for custom casted attribute types [#1330 / wimski](https://github.com/barryvdh/laravel-ide-helper/pull/1330) - Refactor resolving of null information for custom casted attribute types [#1330 / wimski](https://github.com/barryvdh/laravel-ide-helper/pull/1330)
### Fixed ### Fixed
- Add support for attribute accessors marked as protected. [#1339 / pindab0ter](https://github.com/barryvdh/laravel-ide-helper/pull/1339)
- Catch exceptions when loading aliases [#1465 / dongm2ez](https://github.com/barryvdh/laravel-ide-helper/pull/1465) - Catch exceptions when loading aliases [#1465 / dongm2ez](https://github.com/barryvdh/laravel-ide-helper/pull/1465)
### Added ### Added
- Add support for nikic/php-parser 5 (next to 4) [#1502 / mfn](https://github.com/barryvdh/laravel-ide-helper/pull/1502) - Add support for nikic/php-parser 5 (next to 4) [#1502 / mfn](https://github.com/barryvdh/laravel-ide-helper/pull/1502)
- Add support for `immutable_date:*` and `immutable_datetime:*` casts. [#1380 / thekonz](https://github.com/barryvdh/laravel-ide-helper/pull/1380) - Add support for `immutable_date:*` and `immutable_datetime:*` casts. [#1380 / thekonz](https://github.com/barryvdh/laravel-ide-helper/pull/1380)
- Add support for real-time facades in the helper file. [pending PR](#) - Add support for attribute accessors marked as protected. [#1339 / pindab0ter](https://github.com/barryvdh/laravel-ide-helper/pull/1339)
2023-02-04, 2.13.0 2023-02-04, 2.13.0
------------------ ------------------
+3 -23
View File
@@ -11,7 +11,7 @@
This package generates helper files that enable your IDE to provide accurate autocompletion. This package generates helper files that enable your IDE to provide accurate autocompletion.
Generation is done based on the files in your project, so they are always up-to-date. Generation is done based on the files in your project, so they are always up-to-date.
It supports Laravel 9+ and PHP 8.0+ The 3.x branch supports Laravel 10 and 11. For older version, use the 2.x releases.
- [Installation](#installation) - [Installation](#installation)
- [Usage](#usage) - [Usage](#usage)
@@ -72,7 +72,7 @@ If for some reason you want manually control this:
_Check out [this Laracasts video](https://laracasts.com/series/how-to-be-awesome-in-phpstorm/episodes/15) for a quick introduction/explanation!_ _Check out [this Laracasts video](https://laracasts.com/series/how-to-be-awesome-in-phpstorm/episodes/15) for a quick introduction/explanation!_
- `php artisan ide-helper:generate` - [PHPDoc generation for Laravel Facades ](#automatic-phpdoc-generation-for-laravel-facades) - `php artisan ide-helper:generate` - [PHPDoc generation for Laravel Facades ](#automatic-phpdoc-generation-for-laravel-facades)
- `php artisan ide-helper:models` - [PHPDocs for models](#automatic-PHPDocs-for-models) - `php artisan ide-helper:models` - [PHPDocs for models](#automatic-phpdocs-for-models)
- `php artisan ide-helper:meta` - [PhpStorm Meta file](#phpstorm-meta-for-container-instances) - `php artisan ide-helper:meta` - [PhpStorm Meta file](#phpstorm-meta-for-container-instances)
@@ -151,7 +151,7 @@ The class name will be different from the model, avoiding the IDE duplicate anno
Writing to the models should keep the existing comments and only append new properties/methods. It will not update changed properties/methods. Writing to the models should keep the existing comments and only append new properties/methods. It will not update changed properties/methods.
With the `--reset (-R)` option, the whole existing PHPDoc is replaced, including any comments that have been made. The `--smart-reset` option will instead keep the 'text' part of the phpdoc comment, and just replace all the property/method defininitions. With the `--reset (-R)` option, the whole existing PHPDoc is replaced, including any comments that have been made.
```bash ```bash
php artisan ide-helper:models "App\Models\Post" php artisan ide-helper:models "App\Models\Post"
@@ -271,26 +271,6 @@ add support for creating a new dedicated class instead of using local scopes in
If for some reason it's undesired to have them generated (one for each column), you can disable this via config `write_model_external_builder_methods` and setting it to `false`. If for some reason it's undesired to have them generated (one for each column), you can disable this via config `write_model_external_builder_methods` and setting it to `false`.
#### Unsupported or custom database types
Common column types (e.g. varchar, integer) are correctly mapped to PHP types (`string`, `int`).
But sometimes you may want to use custom column types in your database like `geography`, `jsonb`, `citext`, `bit`, etc. which may throw an "Unknown database type"-Exception.
For those special cases, you can map them via the config `custom_db_types`. Example:
```php
'custom_db_types' => [
'mysql' => [
'geography' => 'array',
'point' => 'array',
],
'postgresql' => [
'jsonb' => 'string',
'_int4' => 'array',
],
],
```
#### Custom Relationship Types #### Custom Relationship Types
If you are using relationships not built into Laravel you will need to specify the name and returning class in the config to get proper generation. If you are using relationships not built into Laravel you will need to specify the name and returning class in the config to get proper generation.
+13 -13
View File
@@ -20,30 +20,30 @@
} }
], ],
"require": { "require": {
"php": "^8.0", "php": "^8.1",
"ext-json": "*", "ext-json": "*",
"barryvdh/reflection-docblock": "^2.0.6", "barryvdh/reflection-docblock": "^2.1.1",
"composer/class-map-generator": "^1.0", "composer/class-map-generator": "^1.0",
"doctrine/dbal": "^2.6 || ^3.1.4", "illuminate/console": "^10 || ^11",
"illuminate/console": "^9 || ^10", "illuminate/database": "^10.38 || ^11",
"illuminate/filesystem": "^9 || ^10", "illuminate/filesystem": "^10 || ^11",
"illuminate/support": "^9 || ^10", "illuminate/support": "^10 || ^11",
"nikic/php-parser": "^4.18 || ^5", "nikic/php-parser": "^4.18 || ^5",
"phpdocumentor/type-resolver": "^1.1.0" "phpdocumentor/type-resolver": "^1.1.0"
}, },
"require-dev": { "require-dev": {
"ext-pdo_sqlite": "*", "ext-pdo_sqlite": "*",
"friendsofphp/php-cs-fixer": "^3", "friendsofphp/php-cs-fixer": "^3",
"illuminate/config": "^9 || ^10", "illuminate/config": "^9 || ^10 || ^11",
"illuminate/view": "^9 || ^10", "illuminate/view": "^9 || ^10 || ^11",
"mockery/mockery": "^1.4", "mockery/mockery": "^1.4",
"orchestra/testbench": "^7 || ^8", "orchestra/testbench": "^8 || ^9",
"phpunit/phpunit": "^9", "phpunit/phpunit": "^10.5",
"spatie/phpunit-snapshot-assertions": "^4", "spatie/phpunit-snapshot-assertions": "^4 || ^5",
"vimeo/psalm": "^5.4" "vimeo/psalm": "^5.4"
}, },
"suggest": { "suggest": {
"illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10)." "illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10|^11)."
}, },
"minimum-stability": "dev", "minimum-stability": "dev",
"prefer-stable": true, "prefer-stable": true,
@@ -65,7 +65,7 @@
}, },
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.14-dev" "dev-master": "3.1-dev"
}, },
"laravel": { "laravel": {
"providers": [ "providers": [
+26 -55
View File
@@ -4,10 +4,10 @@ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Filename & Format | Filename
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| The default filename | The default filename.
| |
*/ */
@@ -18,7 +18,7 @@ return [
| Models filename | Models filename
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| The default filename for the models helper file | The default filename for the models helper file.
| |
*/ */
@@ -26,7 +26,7 @@ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Where to write the PhpStorm specific meta file | PhpStorm meta filename
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| PhpStorm also supports the directory `.phpstorm.meta.php/` with arbitrary | PhpStorm also supports the directory `.phpstorm.meta.php/` with arbitrary
@@ -41,7 +41,7 @@ return [
| Fluent helpers | Fluent helpers
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Set to true to generate commonly used Fluent methods | Set to true to generate commonly used Fluent methods.
| |
*/ */
@@ -49,7 +49,7 @@ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Factory Builders | Factory builders
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Set to true to generate factory generators for better factory() | Set to true to generate factory generators for better factory()
@@ -63,10 +63,10 @@ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Write Model Magic methods | Write model magic methods
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Set to false to disable write magic methods of model | Set to false to disable write magic methods of model.
| |
*/ */
@@ -74,10 +74,10 @@ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Write Model External Eloquent Builder methods | Write model external Eloquent builder methods
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Set to false to disable write external eloquent builder methods | Set to false to disable write external Eloquent builder methods.
| |
*/ */
@@ -85,7 +85,7 @@ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Write Model relation count properties | Write model relation count properties
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Set to false to disable writing of relation count properties to model DocBlocks. | Set to false to disable writing of relation count properties to model DocBlocks.
@@ -96,11 +96,11 @@ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Write Eloquent Model Mixins | Write Eloquent model mixins
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| This will add the necessary DocBlock mixins to the model class | This will add the necessary DocBlock mixins to the model class
| contained in the Laravel Framework. This helps the IDE with | contained in the Laravel framework. This helps the IDE with
| auto-completion. | auto-completion.
| |
| Please be aware that this setting changes a file within the /vendor directory. | Please be aware that this setting changes a file within the /vendor directory.
@@ -134,7 +134,7 @@ return [
| for models. | for models.
| |
| glob patterns are supported to easier reach models in sub-directories, | glob patterns are supported to easier reach models in sub-directories,
| e.g. `app/Services/* /Models` (without the space) | e.g. `app/Services/* /Models` (without the space).
| |
*/ */
@@ -152,7 +152,7 @@ return [
*/ */
'ignored_models' => [ 'ignored_models' => [
// App\MyModel::class,
], ],
/* /*
@@ -160,7 +160,7 @@ return [
| Models hooks | Models hooks
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Define which hook classes you want to run for models to add custom information | Define which hook classes you want to run for models to add custom information.
| |
| Hooks should implement Barryvdh\LaravelIdeHelper\Contracts\ModelHookInterface. | Hooks should implement Barryvdh\LaravelIdeHelper\Contracts\ModelHookInterface.
| |
@@ -175,7 +175,7 @@ return [
| Extra classes | Extra classes
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| These implementations are not really extended, but called with magic functions | These implementations are not really extended, but called with magic functions.
| |
*/ */
@@ -197,37 +197,7 @@ return [
*/ */
'interfaces' => [ 'interfaces' => [
// App\MyInterface::class => App\MyImplementation::class,
],
/*
|--------------------------------------------------------------------------
| Support for custom DB types
|--------------------------------------------------------------------------
|
| This setting allow you to map any custom database type (that you may have
| created using CREATE TYPE statement or imported using database plugin
| / extension to a Doctrine type.
|
| Each key in this array is a name of the Doctrine2 DBAL Platform. Currently valid names are:
| 'postgresql', 'db2', 'drizzle', 'mysql', 'oracle', 'sqlanywhere', 'sqlite', 'mssql'
|
| This name is returned by getName() method of the specific Doctrine/DBAL/Platforms/AbstractPlatform descendant
|
| The value of the array is an array of type mappings. Key is the name of the custom type,
| (for example, "jsonb" from Postgres 9.4) and the value is the name of the corresponding Doctrine2 type (in
| our case it is 'json_array'. Doctrine types are listed here:
| https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#types
|
| So to support jsonb in your models when working with Postgres, just add the following entry to the array below:
|
| "postgresql" => array(
| "jsonb" => "json_array",
| ),
|
*/
'custom_db_types' => [
], ],
/* /*
@@ -258,7 +228,7 @@ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Property Casts | Property casts
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Cast the given "real type" to the given "type". | Cast the given "real type" to the given "type".
@@ -285,9 +255,9 @@ return [
| Force FQN usage | Force FQN usage
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Use the fully qualified (class) name in docBlock, | Use the fully qualified (class) name in DocBlocks,
| event if class exists in a given file | even if the class exists in the same namespace
| or there is an import (use className) of a given class | or there is an import (use className) of the class.
| |
*/ */
'force_fqn' => false, 'force_fqn' => false,
@@ -309,8 +279,8 @@ return [
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Sometimes it's needed to create custom relation types. The key of the array | Sometimes it's needed to create custom relation types. The key of the array
| is the Relationship Method name. The value of the array is the canonical class | is the relationship method name. The value of the array is the fully-qualified
| name of the Relationship, e.g. `'relationName' => RelationShipClass::class`. | class name of the relationship, e.g. `'relationName' => RelationShipClass::class`.
| |
*/ */
'additional_relation_types' => [], 'additional_relation_types' => [],
@@ -322,7 +292,8 @@ return [
| |
| When using custom relation types its possible for the class name to not contain | When using custom relation types its possible for the class name to not contain
| the proper return type of the relation. The key of the array is the relationship | the proper return type of the relation. The key of the array is the relationship
| method name. The value of the array is the return type of the relation. | method name. The value of the array is the return type of the relation ('many'
| or 'morphTo').
| e.g. `'relationName' => 'many'`. | e.g. `'relationName' => 'many'`.
| |
*/ */
+7 -14
View File
@@ -1,24 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <phpunit
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
bootstrap="vendor/autoload.php" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"
backupGlobals="false" cacheDirectory=".phpunit.result.cache"
backupStaticAttributes="false" >
colors="true"
verbose="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites> <testsuites>
<testsuite name="Unit Tests"> <testsuite name="Unit Tests">
<directory>tests</directory> <directory>tests</directory>
</testsuite> </testsuite>
</testsuites> </testsuites>
<coverage> <source>
<include> <include>
<directory suffix=".php">src/</directory> <directory suffix=".php">src/</directory>
</include> </include>
</coverage> </source>
</phpunit> </phpunit>
+162 -141
View File
@@ -12,17 +12,19 @@
namespace Barryvdh\LaravelIdeHelper\Console; namespace Barryvdh\LaravelIdeHelper\Console;
use Barryvdh\LaravelIdeHelper\Contracts\ModelHookInterface; use Barryvdh\LaravelIdeHelper\Contracts\ModelHookInterface;
use Barryvdh\LaravelIdeHelper\Parsers\PhpDocReturnTypeParser;
use Barryvdh\Reflection\DocBlock; use Barryvdh\Reflection\DocBlock;
use Barryvdh\Reflection\DocBlock\Context; use Barryvdh\Reflection\DocBlock\Context;
use Barryvdh\Reflection\DocBlock\Serializer as DocBlockSerializer; use Barryvdh\Reflection\DocBlock\Serializer as DocBlockSerializer;
use Barryvdh\Reflection\DocBlock\Tag; use Barryvdh\Reflection\DocBlock\Tag;
use Composer\ClassMapGenerator\ClassMapGenerator; use Composer\ClassMapGenerator\ClassMapGenerator;
use Doctrine\DBAL\Exception as DBALException;
use Doctrine\DBAL\Types\Type;
use Illuminate\Console\Command; 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\AsEnumCollection;
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;
@@ -34,10 +36,14 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Relations\HasOneThrough; use Illuminate\Database\Eloquent\Relations\HasOneThrough;
use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\Relations\MorphOne; use Illuminate\Database\Eloquent\Relations\MorphOne;
use Illuminate\Database\Eloquent\Relations\MorphPivot;
use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Relations\MorphToMany; use Illuminate\Database\Eloquent\Relations\MorphToMany;
use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Schema\Builder;
use Illuminate\Filesystem\Filesystem; use Illuminate\Filesystem\Filesystem;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use phpDocumentor\Reflection\Types\ContextFactory; use phpDocumentor\Reflection\Types\ContextFactory;
@@ -103,11 +109,10 @@ class ModelsCommand extends Command
protected $write_mixin = false; protected $write_mixin = false;
protected $dirs = []; protected $dirs = [];
protected $reset; protected $reset;
protected $keep_text;
protected $phpstorm_noinspections; protected $phpstorm_noinspections;
protected $write_model_external_builder_methods; protected $write_model_external_builder_methods;
/** /**
* @var bool[string] * @var array<string, true>
*/ */
protected $nullableColumns = []; protected $nullableColumns = [];
/** /**
@@ -151,9 +156,6 @@ class ModelsCommand extends Command
$ignore = $this->option('ignore'); $ignore = $this->option('ignore');
$this->reset = $this->option('reset'); $this->reset = $this->option('reset');
$this->phpstorm_noinspections = $this->option('phpstorm-noinspections'); $this->phpstorm_noinspections = $this->option('phpstorm-noinspections');
if ($this->option('smart-reset')) {
$this->keep_text = $this->reset = true;
}
$this->write_model_magic_where = $this->laravel['config']->get('ide-helper.write_model_magic_where', true); $this->write_model_magic_where = $this->laravel['config']->get('ide-helper.write_model_magic_where', true);
$this->write_model_external_builder_methods = $this->laravel['config']->get('ide-helper.write_model_external_builder_methods', true); $this->write_model_external_builder_methods = $this->laravel['config']->get('ide-helper.write_model_external_builder_methods', true);
$this->write_model_relation_count_properties = $this->write_model_relation_count_properties =
@@ -241,8 +243,6 @@ class ModelsCommand extends Command
*/ */
\n\n"; \n\n";
$hasDoctrine = interface_exists('Doctrine\DBAL\Driver');
if (empty($loadModels)) { if (empty($loadModels)) {
$models = $this->loadModels(); $models = $this->loadModels();
} else { } else {
@@ -285,9 +285,7 @@ class ModelsCommand extends Command
$model = $this->laravel->make($name); $model = $this->laravel->make($name);
if ($hasDoctrine) {
$this->getPropertiesFromTable($model); $this->getPropertiesFromTable($model);
}
if (method_exists($model, 'getCasts')) { if (method_exists($model, 'getCasts')) {
$this->castPropertiesType($model); $this->castPropertiesType($model);
@@ -311,13 +309,6 @@ class ModelsCommand extends Command
} }
} }
if (!$hasDoctrine) {
$this->error(
'Warning: `"doctrine/dbal": "~2.3"` is required to load database information. ' .
'Please require that in your composer.json and run `composer update`.'
);
}
return $output; return $output;
} }
@@ -387,7 +378,7 @@ class ModelsCommand extends Command
break; break;
case 'boolean': case 'boolean':
case 'bool': case 'bool':
$realType = 'boolean'; $realType = 'bool';
break; break;
case 'decimal': case 'decimal':
case 'string': case 'string':
@@ -403,7 +394,7 @@ class ModelsCommand extends Command
case 'int': case 'int':
case 'integer': case 'integer':
case 'timestamp': case 'timestamp':
$realType = 'integer'; $realType = 'int';
break; break;
case 'real': case 'real':
case 'double': case 'double':
@@ -418,9 +409,14 @@ class ModelsCommand extends Command
case 'immutable_datetime': case 'immutable_datetime':
$realType = '\Carbon\CarbonImmutable'; $realType = '\Carbon\CarbonImmutable';
break; break;
case AsCollection::class:
case AsEnumCollection::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 `:`
@@ -501,31 +497,14 @@ class ModelsCommand extends Command
* *
* @param Model $model * @param Model $model
* *
* @throws DBALException If custom field failed to register
*/ */
public function getPropertiesFromTable($model) public function getPropertiesFromTable($model)
{ {
$database = $model->getConnection()->getDatabaseName(); $table = $model->getTable();
$table = $model->getConnection()->getTablePrefix() . $model->getTable(); $schema = $model->getConnection()->getSchemaBuilder();
$schema = $model->getConnection()->getDoctrineSchemaManager(); $columns = $schema->getColumns($table);
$databasePlatform = $schema->getDatabasePlatform(); $driverName = $model->getConnection()->getDriverName();
$databasePlatform->registerDoctrineTypeMapping('enum', 'string');
$platformName = $databasePlatform->getName();
$customTypes = $this->laravel['config']->get("ide-helper.custom_db_types.{$platformName}", []);
foreach ($customTypes as $yourTypeName => $doctrineTypeName) {
try {
if (!Type::hasType($yourTypeName)) {
Type::addType($yourTypeName, get_class(Type::getType($doctrineTypeName)));
}
} catch (DBALException $exception) {
$this->error("Failed registering custom db type \"$yourTypeName\" as \"$doctrineTypeName\"");
throw $exception;
}
$databasePlatform->registerDoctrineTypeMapping($yourTypeName, $doctrineTypeName);
}
$columns = $schema->listTableColumns($table, $database);
if (!$columns) { if (!$columns) {
return; return;
@@ -533,49 +512,28 @@ class ModelsCommand extends Command
$this->setForeignKeys($schema, $table); $this->setForeignKeys($schema, $table);
foreach ($columns as $column) { foreach ($columns as $column) {
$name = $column->getName(); $name = $column['name'];
if (in_array($name, $model->getDates())) { if (in_array($name, $model->getDates())) {
$type = $this->dateClass; $type = $this->dateClass;
} else { } else {
$type = $column->getType()->getName(); // Match types to php equivalent
switch ($type) { $type = match ($column['type_name']) {
case 'string': 'tinyint', 'bit',
case 'text': 'integer', 'int', 'int4',
case 'date': 'smallint', 'int2',
case 'time': 'mediumint',
case 'guid': 'bigint', 'int8' => 'int',
case 'datetimetz':
case 'datetime': 'boolean', 'bool' => 'bool',
case 'decimal':
$type = 'string'; 'float', 'real', 'float4',
break; 'double', 'float8' => 'float',
case 'integer':
case 'bigint': default => 'string',
case 'smallint': };
$type = 'integer';
break;
case 'boolean':
switch ($platformName) {
case 'sqlite':
case 'mysql':
$type = 'integer';
break;
default:
$type = 'boolean';
break;
}
break;
case 'float':
$type = 'float';
break;
default:
$type = 'mixed';
break;
}
} }
$comment = $column->getComment(); if ($column['nullable']) {
if (!$column->getNotnull()) {
$this->nullableColumns[$name] = true; $this->nullableColumns[$name] = true;
} }
$this->setProperty( $this->setProperty(
@@ -583,8 +541,8 @@ class ModelsCommand extends Command
$this->getTypeInModel($model, $type), $this->getTypeInModel($model, $type),
true, true,
true, true,
$comment, $column['comment'],
!$column->getNotnull() $column['nullable']
); );
if ($this->write_model_magic_where) { if ($this->write_model_magic_where) {
$builderClass = $this->write_model_external_builder_methods $builderClass = $this->write_model_external_builder_methods
@@ -614,10 +572,7 @@ class ModelsCommand extends Command
// methods that resemble mutators but aren't. // methods that resemble mutators but aren't.
$reflections = array_filter($reflections, function (\ReflectionMethod $methodReflection) { $reflections = array_filter($reflections, function (\ReflectionMethod $methodReflection) {
return !$methodReflection->isPrivate() && !( return !$methodReflection->isPrivate() && !(
in_array( $methodReflection->getDeclaringClass()->getName() === Model::class && (
\Illuminate\Database\Eloquent\Concerns\HasAttributes::class,
$methodReflection->getDeclaringClass()->getTraitNames()
) && (
$methodReflection->getName() === 'setClassCastableAttribute' || $methodReflection->getName() === 'setClassCastableAttribute' ||
$methodReflection->getName() === 'setEnumCastableAttribute' $methodReflection->getName() === 'setEnumCastableAttribute'
) )
@@ -629,10 +584,7 @@ class ModelsCommand extends Command
$isAttribute = is_a($type, '\Illuminate\Database\Eloquent\Casts\Attribute', true); $isAttribute = is_a($type, '\Illuminate\Database\Eloquent\Casts\Attribute', true);
$method = $reflection->getName(); $method = $reflection->getName();
if ( if (
Str::startsWith($method, 'get') && Str::endsWith( Str::startsWith($method, 'get') && Str::endsWith($method, 'Attribute') && $method !== 'getAttribute'
$method,
'Attribute'
) && $method !== 'getAttribute'
) { ) {
//Magic get<name>Attribute //Magic get<name>Attribute
$name = Str::snake(substr($method, 3, -9)); $name = Str::snake(substr($method, 3, -9));
@@ -643,23 +595,19 @@ class ModelsCommand extends Command
$this->setProperty($name, $type, true, null, $comment); $this->setProperty($name, $type, true, null, $comment);
} }
} elseif ($isAttribute) { } elseif ($isAttribute) {
$name = Str::snake($method); $types = $this->getAttributeTypes($model, $reflection);
$types = $this->getAttributeReturnType($model, $reflection); $type = $this->getTypeInModel($model, $types->get('get') ?: $types->get('set')) ?: null;
$comment = $this->getCommentFromDocBlock($reflection); $this->setProperty(
Str::snake($method),
if ($types->has('get')) { $type,
$type = $this->getTypeInModel($model, $types['get']); $types->has('get') ?: null,
$this->setProperty($name, $type, true, null, $comment); $types->has('set') ?: null,
} $this->getCommentFromDocBlock($reflection)
);
if ($types->has('set')) {
$this->setProperty($name, null, null, true, $comment);
}
} elseif ( } elseif (
Str::startsWith($method, 'set') && Str::endsWith( Str::startsWith($method, 'set') &&
$method, Str::endsWith($method, 'Attribute') &&
'Attribute' $method !== 'setAttribute'
) && $method !== 'setAttribute'
) { ) {
//Magic set<name>Attribute //Magic set<name>Attribute
$name = Str::snake(substr($method, 3, -9)); $name = Str::snake(substr($method, 3, -9));
@@ -667,8 +615,8 @@ class ModelsCommand extends Command
$comment = $this->getCommentFromDocBlock($reflection); $comment = $this->getCommentFromDocBlock($reflection);
$this->setProperty($name, null, null, true, $comment); $this->setProperty($name, null, null, true, $comment);
} }
} elseif (Str::startsWith($method, 'scope') && $method !== 'scopeQuery') { } elseif (Str::startsWith($method, 'scope') && $method !== 'scopeQuery' && $method !== 'scope' && $method !== 'scopes') {
//Magic set<name>Attribute //Magic scope<name>Attribute
$name = Str::camel(substr($method, 5)); $name = Str::camel(substr($method, 5));
if (!empty($name)) { if (!empty($name)) {
$comment = $this->getCommentFromDocBlock($reflection); $comment = $this->getCommentFromDocBlock($reflection);
@@ -680,8 +628,8 @@ class ModelsCommand extends Command
get_class($model->newModelQuery()) get_class($model->newModelQuery())
); );
$modelName = $this->getClassNameInDestinationFile( $modelName = $this->getClassNameInDestinationFile(
$reflection->getDeclaringClass(), new ReflectionClass($model),
$reflection->getDeclaringClass()->getName() get_class($model)
); );
$this->setMethod($name, $builder . '|' . $modelName, $args, $comment); $this->setMethod($name, $builder . '|' . $modelName, $args, $comment);
} }
@@ -753,10 +701,26 @@ class ModelsCommand extends Command
get_class($relationObj->getRelated()) get_class($relationObj->getRelated())
); );
$relationReturnType = $this->getRelationReturnTypes()[$relation] ?? false;
if ( if (
strpos(get_class($relationObj), 'Many') !== false || $relationReturnType === 'many' ||
($this->getRelationReturnTypes()[$relation] ?? '') === 'many' (
!$relationReturnType &&
strpos(get_class($relationObj), 'Many') !== false
)
) { ) {
if ($relationObj instanceof BelongsToMany) {
$pivot = get_class($relationObj->newPivot());
if (!in_array($pivot, [Pivot::class, MorphPivot::class])) {
$this->setProperty(
$relationObj->getPivotAccessor(),
$this->getClassNameInDestinationFile($model, $pivot),
true,
false
);
}
}
//Collection or array of models (because Collection is Arrayable) //Collection or array of models (because Collection is Arrayable)
$relatedClass = '\\' . get_class($relationObj->getRelated()); $relatedClass = '\\' . get_class($relationObj->getRelated());
$collectionClass = $this->getCollectionClass($relatedClass); $collectionClass = $this->getCollectionClass($relatedClass);
@@ -782,8 +746,11 @@ class ModelsCommand extends Command
); );
} }
} elseif ( } elseif (
$relation === 'morphTo' || $relationReturnType === 'morphTo' ||
($this->getRelationReturnTypes()[$relation] ?? '') === 'morphTo' (
!$relationReturnType &&
$relation === 'morphTo'
)
) { ) {
// Model isn't specified because relation is polymorphic // Model isn't specified because relation is polymorphic
$this->setProperty( $this->setProperty(
@@ -791,7 +758,8 @@ class ModelsCommand extends Command
$this->getClassNameInDestinationFile($model, Model::class) . '|\Eloquent', $this->getClassNameInDestinationFile($model, Model::class) . '|\Eloquent',
true, true,
null, null,
$comment $comment,
$this->isMorphToRelationNullable($relationObj)
); );
} else { } else {
//Single model is returned //Single model is returned
@@ -838,12 +806,44 @@ class ModelsCommand extends Command
$fkProp = $reflectionObj->getProperty('foreignKey'); $fkProp = $reflectionObj->getProperty('foreignKey');
$fkProp->setAccessible(true); $fkProp->setAccessible(true);
if ($relation === 'belongsTo') { foreach (Arr::wrap($fkProp->getValue($relationObj)) as $foreignKey) {
return isset($this->nullableColumns[$fkProp->getValue($relationObj)]) || if (isset($this->nullableColumns[$foreignKey])) {
!in_array($fkProp->getValue($relationObj), $this->foreignKeyConstraintsColumns, true); return true;
} }
return isset($this->nullableColumns[$fkProp->getValue($relationObj)]); if (!in_array($foreignKey, $this->foreignKeyConstraintsColumns, true)) {
return true;
}
}
return false;
}
/**
* Check if the morphTo relation is nullable
*
* @param Relation $relationObj
*
* @return bool
*/
protected function isMorphToRelationNullable(Relation $relationObj): bool
{
$reflectionObj = new ReflectionObject($relationObj);
if (!$reflectionObj->hasProperty('foreignKey')) {
return false;
}
$fkProp = $reflectionObj->getProperty('foreignKey');
$fkProp->setAccessible(true);
foreach (Arr::wrap($fkProp->getValue($relationObj)) as $foreignKey) {
if (isset($this->nullableColumns[$foreignKey])) {
return true;
}
}
return false;
} }
/** /**
@@ -892,7 +892,12 @@ class ModelsCommand extends Command
public function unsetMethod($name) public function unsetMethod($name)
{ {
unset($this->methods[strtolower($name)]); foreach ($this->methods as $k => $v) {
if (strtolower($k) === strtolower($name)) {
unset($this->methods[$k]);
return;
}
}
} }
public function getMethodType(Model $model, string $classType) public function getMethodType(Model $model, string $classType)
@@ -920,19 +925,13 @@ class ModelsCommand extends Command
if ($this->reset) { if ($this->reset) {
$phpdoc = new DocBlock('', new Context($namespace)); $phpdoc = new DocBlock('', new Context($namespace));
if ($this->keep_text) {
$phpdoc->setText( $phpdoc->setText(
(new DocBlock($reflection, new Context($namespace)))->getText() (new DocBlock($reflection, new Context($namespace)))->getText()
); );
}
} else { } else {
$phpdoc = new DocBlock($reflection, new Context($namespace)); $phpdoc = new DocBlock($reflection, new Context($namespace));
} }
if (!$phpdoc->getText()) {
$phpdoc->setText($class);
}
$properties = []; $properties = [];
$methods = []; $methods = [];
foreach ($phpdoc->getTags() as $tag) { foreach ($phpdoc->getTags() as $tag) {
@@ -1057,7 +1056,9 @@ class ModelsCommand extends Command
} }
$classname = $this->write_mixin ? $mixinClassName : $classname; $classname = $this->write_mixin ? $mixinClassName : $classname;
$output = "namespace {$namespace}{\n{$docComment}\n\t{$keyword}class {$classname} ";
$allowDynamicAttributes = $this->write_mixin ? "#[\AllowDynamicProperties]\n\t" : '';
$output = "namespace {$namespace}{\n{$docComment}\n\t{$allowDynamicAttributes}{$keyword}class {$classname} ";
if (!$this->write_mixin) { if (!$this->write_mixin) {
$output .= "extends \Eloquent "; $output .= "extends \Eloquent ";
@@ -1176,7 +1177,10 @@ class ModelsCommand extends Command
return $this->laravel['config']->get('ide-helper.model_camel_case_properties', false); return $this->laravel['config']->get('ide-helper.model_camel_case_properties', false);
} }
protected function getAttributeReturnType(Model $model, \ReflectionMethod $reflectionMethod): Collection /**
* @psalm-suppress NoValue
*/
protected function getAttributeTypes(Model $model, \ReflectionMethod $reflectionMethod): Collection
{ {
// Private/protected ReflectionMethods require setAccessible prior to PHP 8.1 // Private/protected ReflectionMethods require setAccessible prior to PHP 8.1
$reflectionMethod->setAccessible(true); $reflectionMethod->setAccessible(true);
@@ -1184,13 +1188,25 @@ class ModelsCommand extends Command
/** @var Attribute $attribute */ /** @var Attribute $attribute */
$attribute = $reflectionMethod->invoke($model); $attribute = $reflectionMethod->invoke($model);
return collect([ $methods = new Collection();
'get' => $attribute->get ? optional(new \ReflectionFunction($attribute->get))->getReturnType() : null,
'set' => $attribute->set ? optional(new \ReflectionFunction($attribute->set))->getReturnType() : null, if ($attribute->get) {
]) $methods['get'] = optional(new \ReflectionFunction($attribute->get))->getReturnType();
->filter() }
if ($attribute->set) {
$function = optional(new \ReflectionFunction($attribute->set));
if ($function->getNumberOfParameters() === 0) {
$methods['set'] = null;
} else {
$methods['set'] = $function->getParameters()[0]->getType();
}
}
return $methods
->map(function ($type) { ->map(function ($type) {
if ($type instanceof \ReflectionUnionType) { if ($type === null) {
$types = collect([]);
} elseif ($type instanceof \ReflectionUnionType) {
$types = collect($type->getTypes()) $types = collect($type->getTypes())
/** @var ReflectionType $reflectionType */ /** @var ReflectionType $reflectionType */
->map(function ($reflectionType) { ->map(function ($reflectionType) {
@@ -1201,7 +1217,7 @@ class ModelsCommand extends Command
$types = collect($this->extractReflectionTypes($type)); $types = collect($this->extractReflectionTypes($type));
} }
if ($type->allowsNull()) { if ($type && $type->allowsNull()) {
$types->push('null'); $types->push('null');
} }
@@ -1261,6 +1277,13 @@ class ModelsCommand extends Command
$phpdoc = new DocBlock($reflection, $context); $phpdoc = new DocBlock($reflection, $context);
if ($phpdoc->hasTag('return')) { if ($phpdoc->hasTag('return')) {
$returnTag = $phpdoc->getTagsByName('return')[0];
$typeParser = new PhpDocReturnTypeParser($returnTag->getContent(), $context->getNamespaceAliases());
if ($typeAlias = $typeParser->parse()) {
return $typeAlias;
}
$type = $phpdoc->getTagsByName('return')[0]->getType(); $type = $phpdoc->getTagsByName('return')[0]->getType();
} }
@@ -1451,8 +1474,7 @@ class ModelsCommand extends Command
{ {
$reflection = $model instanceof ReflectionClass $reflection = $model instanceof ReflectionClass
? $model ? $model
: new ReflectionObject($model) : new ReflectionObject($model);
;
$className = trim($className, '\\'); $className = trim($className, '\\');
$writingToExternalFile = !$this->write || $this->write_mixin; $writingToExternalFile = !$this->write || $this->write_mixin;
@@ -1611,7 +1633,7 @@ class ModelsCommand extends Command
protected function getReflectionNamedType(ReflectionNamedType $paramType): string protected function getReflectionNamedType(ReflectionNamedType $paramType): string
{ {
$parameterName = $paramType->getName(); $parameterName = $paramType->getName();
if (!$paramType->isBuiltin()) { if (!$paramType->isBuiltin() && $paramType->getName() !== 'static') {
$parameterName = '\\' . $parameterName; $parameterName = '\\' . $parameterName;
} }
@@ -1641,14 +1663,13 @@ class ModelsCommand extends Command
} }
/** /**
* @param \Doctrine\DBAL\Schema\AbstractSchemaManager $schema * @param Builder $schema
* @param string $table * @param string $table
* @throws DBALException
*/ */
protected function setForeignKeys($schema, $table) protected function setForeignKeys($schema, $table)
{ {
foreach ($schema->listTableForeignKeys($table) as $foreignKeyConstraint) { foreach ($schema->getForeignKeys($table) as $foreignKeyConstraint) {
foreach ($foreignKeyConstraint->getLocalColumns() as $columnName) { foreach ($foreignKeyConstraint['columns'] as $columnName) {
$this->foreignKeyConstraintsColumns[] = $columnName; $this->foreignKeyConstraintsColumns[] = $columnName;
} }
} }
+3 -2
View File
@@ -195,10 +195,11 @@ class Generator
return $facades; return $facades;
} }
protected function getFullyQualifiedClassNameInFile(string $path) { protected function getFullyQualifiedClassNameInFile(string $path)
{
$contents = file_get_contents($path); $contents = file_get_contents($path);
$parsers = new Php7(new Emulative); $parsers = new Php7(new Emulative());
$parsed = collect($parsers->parse($contents) ?: []); $parsed = collect($parsers->parse($contents) ?: []);
+79
View File
@@ -0,0 +1,79 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Parsers;
class PhpDocReturnTypeParser
{
/**
* @var string
*/
private string $typeAlias;
/**
* @var array
*/
private array $namespaceAliases;
/**
* @param string $typeAlias
* @param array $namespaceAliases
*/
public function __construct(string $typeAlias, array $namespaceAliases)
{
$this->typeAlias = $typeAlias;
$this->namespaceAliases = $namespaceAliases;
}
/**
* @return string|null
*/
public function parse(): string|null
{
$matches = [];
preg_match('/(\w+)(<.*>)/', $this->typeAlias, $matches);
$matchCount = count($matches);
if ($matchCount === 0 || $matchCount === 1) {
return null;
}
if (empty($this->namespaceAliases[$matches[1]])) {
return null;
}
return $this->namespaceAliases[$matches[1]] . $this->parseTemplate($matches[2] ?? null);
}
/**
* @param string|null $template
* @return string
*/
private function parseTemplate(string|null $template): string
{
if ($template === null || $template === '') {
return '';
}
$type = '';
$result = '';
foreach (str_split($template) as $char) {
$match = preg_match('/[A-z]/', $char);
if (!$match) {
$type = $this->namespaceAliases[$type] ?? $type;
$result .= $type;
$result .= $char;
$type = '';
continue;
}
$type .= $char;
}
return $result;
}
}
@@ -0,0 +1,31 @@
<?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\Casts\AsEnumCollection;
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_enum_collection' => AsEnumCollection::class,
'cast_to_as_array_object' => AsArrayObject::class,
];
}
@@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
class Test extends AbstractModelsCommand
{
public function test(): void
{
$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,69 @@
<?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\Casts\AsEnumCollection;
use Illuminate\Database\Eloquent\Model;
/**
*
*
* @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 int $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 \Illuminate\Support\Collection $cast_to_as_enum_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 whereCastToAsEnumCollection($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_enum_collection' => AsEnumCollection::class,
'cast_to_as_array_object' => AsArrayObject::class,
];
}
@@ -7,9 +7,9 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AllowGlobDirecto
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AllowGlobDirectory\Services\Post\Models\Post
* *
* @property integer $id *
* @property int $id
* @property string|null $char_nullable * @property string|null $char_nullable
* @property string $char_not_nullable * @property string $char_not_nullable
* @property string|null $string_nullable * @property string|null $string_nullable
@@ -20,36 +20,34 @@ use Illuminate\Database\Eloquent\Model;
* @property string $medium_text_not_nullable * @property string $medium_text_not_nullable
* @property string|null $long_text_nullable * @property string|null $long_text_nullable
* @property string $long_text_not_nullable * @property string $long_text_not_nullable
* @property integer|null $integer_nullable * @property int|null $integer_nullable
* @property integer $integer_not_nullable * @property int $integer_not_nullable
* @property integer|null $tiny_integer_nullable * @property int|null $tiny_integer_nullable
* @property integer $tiny_integer_not_nullable * @property int $tiny_integer_not_nullable
* @property integer|null $small_integer_nullable * @property int|null $small_integer_nullable
* @property integer $small_integer_not_nullable * @property int $small_integer_not_nullable
* @property integer|null $medium_integer_nullable * @property int|null $medium_integer_nullable
* @property integer $medium_integer_not_nullable * @property int $medium_integer_not_nullable
* @property integer|null $big_integer_nullable * @property int|null $big_integer_nullable
* @property integer $big_integer_not_nullable * @property int $big_integer_not_nullable
* @property integer|null $unsigned_integer_nullable * @property int|null $unsigned_integer_nullable
* @property integer $unsigned_integer_not_nullable * @property int $unsigned_integer_not_nullable
* @property integer|null $unsigned_tiny_integer_nullable * @property int|null $unsigned_tiny_integer_nullable
* @property integer $unsigned_tiny_integer_not_nullable * @property int $unsigned_tiny_integer_not_nullable
* @property integer|null $unsigned_small_integer_nullable * @property int|null $unsigned_small_integer_nullable
* @property integer $unsigned_small_integer_not_nullable * @property int $unsigned_small_integer_not_nullable
* @property integer|null $unsigned_medium_integer_nullable * @property int|null $unsigned_medium_integer_nullable
* @property integer $unsigned_medium_integer_not_nullable * @property int $unsigned_medium_integer_not_nullable
* @property integer|null $unsigned_big_integer_nullable * @property int|null $unsigned_big_integer_nullable
* @property integer $unsigned_big_integer_not_nullable * @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable * @property float|null $float_nullable
* @property float $float_not_nullable * @property float $float_not_nullable
* @property float|null $double_nullable * @property float|null $double_nullable
* @property float $double_not_nullable * @property float $double_not_nullable
* @property string|null $decimal_nullable * @property string|null $decimal_nullable
* @property string $decimal_not_nullable * @property string $decimal_not_nullable
* @property string|null $unsigned_decimal_nullable * @property int|null $boolean_nullable
* @property string $unsigned_decimal_not_nullable * @property int $boolean_not_nullable
* @property integer|null $boolean_nullable
* @property integer $boolean_not_nullable
* @property string|null $enum_nullable * @property string|null $enum_nullable
* @property string $enum_not_nullable * @property string $enum_not_nullable
* @property string|null $json_nullable * @property string|null $json_nullable
@@ -70,10 +68,10 @@ use Illuminate\Database\Eloquent\Model;
* @property string $timestamp_not_nullable * @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable * @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable * @property string $timestamptz_not_nullable
* @property integer|null $year_nullable * @property int|null $year_nullable
* @property integer $year_not_nullable * @property int $year_not_nullable
* @property mixed|null $binary_nullable * @property string|null $binary_nullable
* @property mixed $binary_not_nullable * @property string $binary_not_nullable
* @property string|null $uuid_nullable * @property string|null $uuid_nullable
* @property string $uuid_not_nullable * @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable * @property string|null $ipaddress_nullable
@@ -143,8 +141,6 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value)
@@ -7,7 +7,7 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ArrayCastsWithCo
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ArrayCastsWithComment\Models\ArrayCastsWithComment *
* *
* @property array<int, string>|null $cast_to_array -- These three should not be duplicated * @property array<int, string>|null $cast_to_array -- These three should not be duplicated
* @property array<int, string> $cast_to_json some-description * @property array<int, string> $cast_to_json some-description
@@ -0,0 +1,59 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Attributes\Models;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;
class BackedAttribute extends Model
{
protected function name(): Attribute
{
return new Attribute(
function (?string $name): ?string {
return $name;
},
function (?string $name): ?string {
return $name;
}
);
}
protected function nameRead(): Attribute
{
return new Attribute(
function (?string $name): ?string {
return $name;
},
);
}
protected function nameWrite(): Attribute
{
return new Attribute(
set: function (?string $name): ?string {
return $name;
},
);
}
protected function nonBackedSet(): Attribute
{
return new Attribute(
set: function (?string $name): ?string {
return $name;
},
);
}
protected function nonBackedGet(): Attribute
{
return new Attribute(
get: function (): ?string {
return 'test';
},
);
}
}
@@ -9,6 +9,7 @@ use Illuminate\Database\Eloquent\Model;
class Simple extends Model class Simple extends Model
{ {
// With a backed property
protected function name(): Attribute protected function name(): Attribute
{ {
return new Attribute( return new Attribute(
@@ -16,11 +17,84 @@ class Simple extends Model
return $name; return $name;
}, },
function (?string $name): ?string { function (?string $name): ?string {
return $name === null ? null : ucfirst($name); return $name;
} }
); );
} }
// Without backed properties
protected function typeHintedGetAndSet(): Attribute
{
return new Attribute(
function (): ?string {
return $this->name;
},
function (?string $name) {
$this->name = $name;
}
);
}
protected function divergingTypeHintedGetAndSet(): Attribute
{
return new Attribute(
function (): int {
return strlen($this->name);
},
function (?string $name) {
$this->name = $name;
}
);
}
protected function typeHintedGet(): Attribute
{
return Attribute::get(function (): ?string {
return $this->name;
});
}
protected function typeHintedSet(): Attribute
{
return Attribute::set(function (?string $name) {
$this->name = $name;
});
}
protected function nonTypeHintedGetAndSet(): Attribute
{
return new Attribute(
function () {
return $this->name;
},
function ($name) {
$this->name = $name;
}
);
}
protected function nonTypeHintedGet(): Attribute
{
return Attribute::get(function () {
return $this->name;
});
}
protected function nonTypeHintedSet(): Attribute
{
return Attribute::set(function ($name) {
$this->name = $name;
});
}
protected function parameterlessSet(): Attribute
{
return Attribute::set(function () {
$this->name = null;
});
}
/** /**
* ide-helper does not recognize this method being an Attribute * ide-helper does not recognize this method being an Attribute
* because the method has no actual return type; * because the method has no actual return type;
@@ -8,17 +8,24 @@ use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Attributes\Models\Simple
* *
* @property integer $id *
* @property int $id
* @property string|null $name * @property string|null $name
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery() * @property string|null $name_read
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery() * @property string|null $name_write
* @method static \Illuminate\Database\Eloquent\Builder|Simple query() * @property-read string|null $non_backed_get
* @method static \Illuminate\Database\Eloquent\Builder|Simple whereId($value) * @property-write string|null $non_backed_set
* @method static \Illuminate\Database\Eloquent\Builder|BackedAttribute newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|BackedAttribute newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|BackedAttribute query()
* @method static \Illuminate\Database\Eloquent\Builder|BackedAttribute whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|BackedAttribute whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|BackedAttribute whereNameRead($value)
* @method static \Illuminate\Database\Eloquent\Builder|BackedAttribute whereNameWrite($value)
* @mixin \Eloquent * @mixin \Eloquent
*/ */
class Simple extends Model class BackedAttribute extends Model
{ {
protected function name(): Attribute protected function name(): Attribute
{ {
@@ -27,11 +34,163 @@ class Simple extends Model
return $name; return $name;
}, },
function (?string $name): ?string { function (?string $name): ?string {
return $name === null ? null : ucfirst($name); return $name;
} }
); );
} }
protected function nameRead(): Attribute
{
return new Attribute(
function (?string $name): ?string {
return $name;
},
);
}
protected function nameWrite(): Attribute
{
return new Attribute(
set: function (?string $name): ?string {
return $name;
},
);
}
protected function nonBackedSet(): Attribute
{
return new Attribute(
set: function (?string $name): ?string {
return $name;
},
);
}
protected function nonBackedGet(): Attribute
{
return new Attribute(
get: function (): ?string {
return 'test';
},
);
}
}
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Attributes\Models;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;
/**
*
*
* @property int $id
* @property int $diverging_type_hinted_get_and_set
* @property string|null $name
* @property-read mixed $non_type_hinted_get
* @property mixed $non_type_hinted_get_and_set
* @property-write mixed $non_type_hinted_set
* @property-write mixed $parameterless_set
* @property-read string|null $type_hinted_get
* @property string|null $type_hinted_get_and_set
* @property-write string|null $type_hinted_set
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple query()
* @method static \Illuminate\Database\Eloquent\Builder|Simple whereId($value)
* @mixin \Eloquent
*/
class Simple extends Model
{
// With a backed property
protected function name(): Attribute
{
return new Attribute(
function (?string $name): ?string {
return $name;
},
function (?string $name): ?string {
return $name;
}
);
}
// Without backed properties
protected function typeHintedGetAndSet(): Attribute
{
return new Attribute(
function (): ?string {
return $this->name;
},
function (?string $name) {
$this->name = $name;
}
);
}
protected function divergingTypeHintedGetAndSet(): Attribute
{
return new Attribute(
function (): int {
return strlen($this->name);
},
function (?string $name) {
$this->name = $name;
}
);
}
protected function typeHintedGet(): Attribute
{
return Attribute::get(function (): ?string {
return $this->name;
});
}
protected function typeHintedSet(): Attribute
{
return Attribute::set(function (?string $name) {
$this->name = $name;
});
}
protected function nonTypeHintedGetAndSet(): Attribute
{
return new Attribute(
function () {
return $this->name;
},
function ($name) {
$this->name = $name;
}
);
}
protected function nonTypeHintedGet(): Attribute
{
return Attribute::get(function () {
return $this->name;
});
}
protected function nonTypeHintedSet(): Attribute
{
return Attribute::set(function ($name) {
$this->name = $name;
});
}
protected function parameterlessSet(): Attribute
{
return Attribute::set(function () {
$this->name = null;
});
}
/** /**
* ide-helper does not recognize this method being an Attribute * ide-helper does not recognize this method being an Attribute
* because the method has no actual return type; * because the method has no actual return type;
@@ -10,9 +10,9 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\Relations\MorphTo;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Comment\Models\Simple
* *
* @property integer $id *
* @property int $id
* @property string $both_same_name I'm a getter * @property string $both_same_name I'm a getter
* @property string $both_without_getter_comment * @property string $both_without_getter_comment
* @property-read string $faker_comment * @property-read string $faker_comment
@@ -9,9 +9,9 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\CustomCollection\Models\Simple
* *
* @property integer $id *
* @property int $id
* @property-read SimpleCollection<int, Simple> $relationHasMany * @property-read SimpleCollection<int, Simple> $relationHasMany
* @property-read int|null $relation_has_many_count * @property-read int|null $relation_has_many_count
* @method static SimpleCollection<int, static> all($columns = ['*']) * @method static SimpleCollection<int, static> all($columns = ['*'])
@@ -7,7 +7,7 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\CustomDate\Model
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\CustomDate\Models\CustomDate *
* *
* @property \Carbon\CarbonImmutable|null $created_at * @property \Carbon\CarbonImmutable|null $created_at
* @property \Carbon\CarbonImmutable|null $updated_at * @property \Carbon\CarbonImmutable|null $updated_at
@@ -0,0 +1,19 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\CustomPhpdocTags\Models;
use Illuminate\Database\Eloquent\Model;
/**
* The `@SuppressWarnings` tag below contains no space before the `(` but when
* the class phpdoc is written back, one is inserted.
*
* @link https://github.com/barryvdh/laravel-ide-helper/issues/666
*
* @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
*/
class Simple extends Model
{
}
@@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\CustomPhpdocTags;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
class Test extends AbstractModelsCommand
{
/**
* This test makes sure that custom phpdoc tags are not mangled, e.g.
* there are no spaces inserted etc.
*
* @link https://github.com/barryvdh/laravel-ide-helper/issues/666
*/
public function testNoSpaceAfterCustomPhpdocTag(): void
{
$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,24 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\CustomPhpdocTags\Models;
use Illuminate\Database\Eloquent\Model;
/**
* The `@SuppressWarnings` tag below contains no space before the `(` but when
* the class phpdoc is written back, one is inserted.
*
* @link https://github.com/barryvdh/laravel-ide-helper/issues/666
* @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
* @property int $id
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple query()
* @method static \Illuminate\Database\Eloquent\Builder|Simple whereId($value)
* @mixin \Eloquent
*/
class Simple extends Model
{
}
@@ -13,9 +13,9 @@
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\DoesNotGeneratePhpdocWithExternalEloquentBuilder\Models{ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\DoesNotGeneratePhpdocWithExternalEloquentBuilder\Models{
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\DoesNotGeneratePhpdocWithExternalEloquentBuilder\Models\Post
* *
* @property integer $id *
* @property int $id
* @property string|null $char_nullable * @property string|null $char_nullable
* @property string $char_not_nullable * @property string $char_not_nullable
* @property string|null $string_nullable * @property string|null $string_nullable
@@ -26,36 +26,34 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\DoesNotGenerateP
* @property string $medium_text_not_nullable * @property string $medium_text_not_nullable
* @property string|null $long_text_nullable * @property string|null $long_text_nullable
* @property string $long_text_not_nullable * @property string $long_text_not_nullable
* @property integer|null $integer_nullable * @property int|null $integer_nullable
* @property integer $integer_not_nullable * @property int $integer_not_nullable
* @property integer|null $tiny_integer_nullable * @property int|null $tiny_integer_nullable
* @property integer $tiny_integer_not_nullable * @property int $tiny_integer_not_nullable
* @property integer|null $small_integer_nullable * @property int|null $small_integer_nullable
* @property integer $small_integer_not_nullable * @property int $small_integer_not_nullable
* @property integer|null $medium_integer_nullable * @property int|null $medium_integer_nullable
* @property integer $medium_integer_not_nullable * @property int $medium_integer_not_nullable
* @property integer|null $big_integer_nullable * @property int|null $big_integer_nullable
* @property integer $big_integer_not_nullable * @property int $big_integer_not_nullable
* @property integer|null $unsigned_integer_nullable * @property int|null $unsigned_integer_nullable
* @property integer $unsigned_integer_not_nullable * @property int $unsigned_integer_not_nullable
* @property integer|null $unsigned_tiny_integer_nullable * @property int|null $unsigned_tiny_integer_nullable
* @property integer $unsigned_tiny_integer_not_nullable * @property int $unsigned_tiny_integer_not_nullable
* @property integer|null $unsigned_small_integer_nullable * @property int|null $unsigned_small_integer_nullable
* @property integer $unsigned_small_integer_not_nullable * @property int $unsigned_small_integer_not_nullable
* @property integer|null $unsigned_medium_integer_nullable * @property int|null $unsigned_medium_integer_nullable
* @property integer $unsigned_medium_integer_not_nullable * @property int $unsigned_medium_integer_not_nullable
* @property integer|null $unsigned_big_integer_nullable * @property int|null $unsigned_big_integer_nullable
* @property integer $unsigned_big_integer_not_nullable * @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable * @property float|null $float_nullable
* @property float $float_not_nullable * @property float $float_not_nullable
* @property float|null $double_nullable * @property float|null $double_nullable
* @property float $double_not_nullable * @property float $double_not_nullable
* @property string|null $decimal_nullable * @property string|null $decimal_nullable
* @property string $decimal_not_nullable * @property string $decimal_not_nullable
* @property string|null $unsigned_decimal_nullable * @property int|null $boolean_nullable
* @property string $unsigned_decimal_not_nullable * @property int $boolean_not_nullable
* @property integer|null $boolean_nullable
* @property integer $boolean_not_nullable
* @property string|null $enum_nullable * @property string|null $enum_nullable
* @property string $enum_not_nullable * @property string $enum_not_nullable
* @property string|null $json_nullable * @property string|null $json_nullable
@@ -76,10 +74,10 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\DoesNotGenerateP
* @property string $timestamp_not_nullable * @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable * @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable * @property string $timestamptz_not_nullable
* @property integer|null $year_nullable * @property int|null $year_nullable
* @property integer $year_not_nullable * @property int $year_not_nullable
* @property mixed|null $binary_nullable * @property string|null $binary_nullable
* @property mixed $binary_not_nullable * @property string $binary_not_nullable
* @property string|null $uuid_nullable * @property string|null $uuid_nullable
* @property string $uuid_not_nullable * @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable * @property string|null $ipaddress_nullable
@@ -149,8 +147,6 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\DoesNotGenerateP
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value)
@@ -10,7 +10,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Relations\HasOne;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\DynamicRelations\Models\Dynamic *
* *
* @property-read \Illuminate\Database\Eloquent\Collection<int, Dynamic> $regularHasMany * @property-read \Illuminate\Database\Eloquent\Collection<int, Dynamic> $regularHasMany
* @property-read int|null $regular_has_many_count * @property-read int|null $regular_has_many_count
@@ -9,7 +9,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Factories\Models\ModelWithCustomNamespace *
* *
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Factories\CustomSpace\ModelWithCustomNamespaceFactory factory($count = null, $state = []) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Factories\CustomSpace\ModelWithCustomNamespaceFactory factory($count = null, $state = [])
* @method static \Illuminate\Database\Eloquent\Builder|ModelWithCustomNamespace newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ModelWithCustomNamespace newModelQuery()
@@ -41,7 +41,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Factories\Models\ModelWithFactory *
* *
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Factories\Factories\ModelWithFactoryFactory factory($count = null, $state = []) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Factories\Factories\ModelWithFactoryFactory factory($count = null, $state = [])
* @method static \Illuminate\Database\Eloquent\Builder|ModelWithFactory newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ModelWithFactory newModelQuery()
@@ -60,7 +60,7 @@ declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Factories\Models; namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Factories\Models;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Factories\Models\ModelWithNestedFactory *
* *
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Factories\Factories\ModelWithNestedFactoryFactory factory($count = null, $state = []) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Factories\Factories\ModelWithNestedFactoryFactory factory($count = null, $state = [])
* @method static \Illuminate\Database\Eloquent\Builder|ModelWithNestedFactory newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ModelWithNestedFactory newModelQuery()
@@ -81,7 +81,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Factories\Models\ModelWithoutFactory *
* *
* @method static \Illuminate\Database\Eloquent\Builder|ModelWithoutFactory newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ModelWithoutFactory newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ModelWithoutFactory newQuery() * @method static \Illuminate\Database\Eloquent\Builder|ModelWithoutFactory newQuery()
@@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWithEnumDefaults\Enums; namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWithEnumDefaults\Enums;
enum PostStatus enum PostStatus
@@ -4,9 +4,9 @@ declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWithEnumDefaults\Models; namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWithEnumDefaults\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWithEnumDefaults\Enums\PostStatus; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWithEnumDefaults\Enums\PostStatus;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class Post extends Model class Post extends Model
{ {
@@ -11,12 +11,6 @@ class Test extends AbstractModelsCommand
{ {
public function test(): void public function test(): void
{ {
if (!version_compare(PHP_VERSION, '8.1', '>=')) {
$this->markTestSkipped(
'This test only works in PHP >= 8.1'
);
}
$command = $this->app->make(ModelsCommand::class); $command = $this->app->make(ModelsCommand::class);
$tester = $this->runCommand($command, [ $tester = $this->runCommand($command, [
@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWithEnumDefaults\Models; namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWithEnumDefaults\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWithEnumDefaults\Enums\PostStatus; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWithEnumDefaults\Enums\PostStatus;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWithEnumDefaults\Models\Post
* *
* @property integer $id *
* @property int $id
* @property string|null $char_nullable * @property string|null $char_nullable
* @property string $char_not_nullable * @property string $char_not_nullable
* @property string|null $string_nullable * @property string|null $string_nullable
@@ -22,36 +22,34 @@ use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWit
* @property string $medium_text_not_nullable * @property string $medium_text_not_nullable
* @property string|null $long_text_nullable * @property string|null $long_text_nullable
* @property string $long_text_not_nullable * @property string $long_text_not_nullable
* @property integer|null $integer_nullable * @property int|null $integer_nullable
* @property integer $integer_not_nullable * @property int $integer_not_nullable
* @property integer|null $tiny_integer_nullable * @property int|null $tiny_integer_nullable
* @property integer $tiny_integer_not_nullable * @property int $tiny_integer_not_nullable
* @property integer|null $small_integer_nullable * @property int|null $small_integer_nullable
* @property integer $small_integer_not_nullable * @property int $small_integer_not_nullable
* @property integer|null $medium_integer_nullable * @property int|null $medium_integer_nullable
* @property integer $medium_integer_not_nullable * @property int $medium_integer_not_nullable
* @property integer|null $big_integer_nullable * @property int|null $big_integer_nullable
* @property integer $big_integer_not_nullable * @property int $big_integer_not_nullable
* @property integer|null $unsigned_integer_nullable * @property int|null $unsigned_integer_nullable
* @property integer $unsigned_integer_not_nullable * @property int $unsigned_integer_not_nullable
* @property integer|null $unsigned_tiny_integer_nullable * @property int|null $unsigned_tiny_integer_nullable
* @property integer $unsigned_tiny_integer_not_nullable * @property int $unsigned_tiny_integer_not_nullable
* @property integer|null $unsigned_small_integer_nullable * @property int|null $unsigned_small_integer_nullable
* @property integer $unsigned_small_integer_not_nullable * @property int $unsigned_small_integer_not_nullable
* @property integer|null $unsigned_medium_integer_nullable * @property int|null $unsigned_medium_integer_nullable
* @property integer $unsigned_medium_integer_not_nullable * @property int $unsigned_medium_integer_not_nullable
* @property integer|null $unsigned_big_integer_nullable * @property int|null $unsigned_big_integer_nullable
* @property integer $unsigned_big_integer_not_nullable * @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable * @property float|null $float_nullable
* @property float $float_not_nullable * @property float $float_not_nullable
* @property float|null $double_nullable * @property float|null $double_nullable
* @property float $double_not_nullable * @property float $double_not_nullable
* @property string|null $decimal_nullable * @property string|null $decimal_nullable
* @property string $decimal_not_nullable * @property string $decimal_not_nullable
* @property string|null $unsigned_decimal_nullable * @property int|null $boolean_nullable
* @property string $unsigned_decimal_not_nullable * @property int $boolean_not_nullable
* @property integer|null $boolean_nullable
* @property integer $boolean_not_nullable
* @property string|null $enum_nullable * @property string|null $enum_nullable
* @property string $enum_not_nullable * @property string $enum_not_nullable
* @property string|null $json_nullable * @property string|null $json_nullable
@@ -72,10 +70,10 @@ use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWit
* @property string $timestamp_not_nullable * @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable * @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable * @property string $timestamptz_not_nullable
* @property integer|null $year_nullable * @property int|null $year_nullable
* @property integer $year_not_nullable * @property int $year_not_nullable
* @property mixed|null $binary_nullable * @property string|null $binary_nullable
* @property mixed $binary_not_nullable * @property string $binary_not_nullable
* @property string|null $uuid_nullable * @property string|null $uuid_nullable
* @property string $uuid_not_nullable * @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable * @property string|null $ipaddress_nullable
@@ -146,8 +144,6 @@ use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpDocWit
* @method static Builder|Post whereTinyIntegerNullable($value) * @method static Builder|Post whereTinyIntegerNullable($value)
* @method static Builder|Post whereUnsignedBigIntegerNotNullable($value) * @method static Builder|Post whereUnsignedBigIntegerNotNullable($value)
* @method static Builder|Post whereUnsignedBigIntegerNullable($value) * @method static Builder|Post whereUnsignedBigIntegerNullable($value)
* @method static Builder|Post whereUnsignedDecimalNotNullable($value)
* @method static Builder|Post whereUnsignedDecimalNullable($value)
* @method static Builder|Post whereUnsignedIntegerNotNullable($value) * @method static Builder|Post whereUnsignedIntegerNotNullable($value)
* @method static Builder|Post whereUnsignedIntegerNullable($value) * @method static Builder|Post whereUnsignedIntegerNullable($value)
* @method static Builder|Post whereUnsignedMediumIntegerNotNullable($value) * @method static Builder|Post whereUnsignedMediumIntegerNotNullable($value)
@@ -7,9 +7,9 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhp
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpdoc\Models\Post
* *
* @property integer $id *
* @property int $id
* @property string|null $char_nullable * @property string|null $char_nullable
* @property string $char_not_nullable * @property string $char_not_nullable
* @property string|null $string_nullable * @property string|null $string_nullable
@@ -20,36 +20,34 @@ use Illuminate\Database\Eloquent\Model;
* @property string $medium_text_not_nullable * @property string $medium_text_not_nullable
* @property string|null $long_text_nullable * @property string|null $long_text_nullable
* @property string $long_text_not_nullable * @property string $long_text_not_nullable
* @property integer|null $integer_nullable * @property int|null $integer_nullable
* @property integer $integer_not_nullable * @property int $integer_not_nullable
* @property integer|null $tiny_integer_nullable * @property int|null $tiny_integer_nullable
* @property integer $tiny_integer_not_nullable * @property int $tiny_integer_not_nullable
* @property integer|null $small_integer_nullable * @property int|null $small_integer_nullable
* @property integer $small_integer_not_nullable * @property int $small_integer_not_nullable
* @property integer|null $medium_integer_nullable * @property int|null $medium_integer_nullable
* @property integer $medium_integer_not_nullable * @property int $medium_integer_not_nullable
* @property integer|null $big_integer_nullable * @property int|null $big_integer_nullable
* @property integer $big_integer_not_nullable * @property int $big_integer_not_nullable
* @property integer|null $unsigned_integer_nullable * @property int|null $unsigned_integer_nullable
* @property integer $unsigned_integer_not_nullable * @property int $unsigned_integer_not_nullable
* @property integer|null $unsigned_tiny_integer_nullable * @property int|null $unsigned_tiny_integer_nullable
* @property integer $unsigned_tiny_integer_not_nullable * @property int $unsigned_tiny_integer_not_nullable
* @property integer|null $unsigned_small_integer_nullable * @property int|null $unsigned_small_integer_nullable
* @property integer $unsigned_small_integer_not_nullable * @property int $unsigned_small_integer_not_nullable
* @property integer|null $unsigned_medium_integer_nullable * @property int|null $unsigned_medium_integer_nullable
* @property integer $unsigned_medium_integer_not_nullable * @property int $unsigned_medium_integer_not_nullable
* @property integer|null $unsigned_big_integer_nullable * @property int|null $unsigned_big_integer_nullable
* @property integer $unsigned_big_integer_not_nullable * @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable * @property float|null $float_nullable
* @property float $float_not_nullable * @property float $float_not_nullable
* @property float|null $double_nullable * @property float|null $double_nullable
* @property float $double_not_nullable * @property float $double_not_nullable
* @property string|null $decimal_nullable * @property string|null $decimal_nullable
* @property string $decimal_not_nullable * @property string $decimal_not_nullable
* @property string|null $unsigned_decimal_nullable * @property int|null $boolean_nullable
* @property string $unsigned_decimal_not_nullable * @property int $boolean_not_nullable
* @property integer|null $boolean_nullable
* @property integer $boolean_not_nullable
* @property string|null $enum_nullable * @property string|null $enum_nullable
* @property string $enum_not_nullable * @property string $enum_not_nullable
* @property string|null $json_nullable * @property string|null $json_nullable
@@ -70,10 +68,10 @@ use Illuminate\Database\Eloquent\Model;
* @property string $timestamp_not_nullable * @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable * @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable * @property string $timestamptz_not_nullable
* @property integer|null $year_nullable * @property int|null $year_nullable
* @property integer $year_not_nullable * @property int $year_not_nullable
* @property mixed|null $binary_nullable * @property string|null $binary_nullable
* @property mixed $binary_not_nullable * @property string $binary_not_nullable
* @property string|null $uuid_nullable * @property string|null $uuid_nullable
* @property string $uuid_not_nullable * @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable * @property string|null $ipaddress_nullable
@@ -143,8 +141,6 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value)
@@ -7,9 +7,9 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhp
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpdocCamel\Models\Post
* *
* @property integer $id *
* @property int $id
* @property string|null $charNullable * @property string|null $charNullable
* @property string $charNotNullable * @property string $charNotNullable
* @property string|null $stringNullable * @property string|null $stringNullable
@@ -20,36 +20,34 @@ use Illuminate\Database\Eloquent\Model;
* @property string $mediumTextNotNullable * @property string $mediumTextNotNullable
* @property string|null $longTextNullable * @property string|null $longTextNullable
* @property string $longTextNotNullable * @property string $longTextNotNullable
* @property integer|null $integerNullable * @property int|null $integerNullable
* @property integer $integerNotNullable * @property int $integerNotNullable
* @property integer|null $tinyIntegerNullable * @property int|null $tinyIntegerNullable
* @property integer $tinyIntegerNotNullable * @property int $tinyIntegerNotNullable
* @property integer|null $smallIntegerNullable * @property int|null $smallIntegerNullable
* @property integer $smallIntegerNotNullable * @property int $smallIntegerNotNullable
* @property integer|null $mediumIntegerNullable * @property int|null $mediumIntegerNullable
* @property integer $mediumIntegerNotNullable * @property int $mediumIntegerNotNullable
* @property integer|null $bigIntegerNullable * @property int|null $bigIntegerNullable
* @property integer $bigIntegerNotNullable * @property int $bigIntegerNotNullable
* @property integer|null $unsignedIntegerNullable * @property int|null $unsignedIntegerNullable
* @property integer $unsignedIntegerNotNullable * @property int $unsignedIntegerNotNullable
* @property integer|null $unsignedTinyIntegerNullable * @property int|null $unsignedTinyIntegerNullable
* @property integer $unsignedTinyIntegerNotNullable * @property int $unsignedTinyIntegerNotNullable
* @property integer|null $unsignedSmallIntegerNullable * @property int|null $unsignedSmallIntegerNullable
* @property integer $unsignedSmallIntegerNotNullable * @property int $unsignedSmallIntegerNotNullable
* @property integer|null $unsignedMediumIntegerNullable * @property int|null $unsignedMediumIntegerNullable
* @property integer $unsignedMediumIntegerNotNullable * @property int $unsignedMediumIntegerNotNullable
* @property integer|null $unsignedBigIntegerNullable * @property int|null $unsignedBigIntegerNullable
* @property integer $unsignedBigIntegerNotNullable * @property int $unsignedBigIntegerNotNullable
* @property float|null $floatNullable * @property float|null $floatNullable
* @property float $floatNotNullable * @property float $floatNotNullable
* @property float|null $doubleNullable * @property float|null $doubleNullable
* @property float $doubleNotNullable * @property float $doubleNotNullable
* @property string|null $decimalNullable * @property string|null $decimalNullable
* @property string $decimalNotNullable * @property string $decimalNotNullable
* @property string|null $unsignedDecimalNullable * @property int|null $booleanNullable
* @property string $unsignedDecimalNotNullable * @property int $booleanNotNullable
* @property integer|null $booleanNullable
* @property integer $booleanNotNullable
* @property string|null $enumNullable * @property string|null $enumNullable
* @property string $enumNotNullable * @property string $enumNotNullable
* @property string|null $jsonNullable * @property string|null $jsonNullable
@@ -70,10 +68,10 @@ use Illuminate\Database\Eloquent\Model;
* @property string $timestampNotNullable * @property string $timestampNotNullable
* @property string|null $timestamptzNullable * @property string|null $timestamptzNullable
* @property string $timestamptzNotNullable * @property string $timestamptzNotNullable
* @property integer|null $yearNullable * @property int|null $yearNullable
* @property integer $yearNotNullable * @property int $yearNotNullable
* @property mixed|null $binaryNullable * @property string|null $binaryNullable
* @property mixed $binaryNotNullable * @property string $binaryNotNullable
* @property string|null $uuidNullable * @property string|null $uuidNullable
* @property string $uuidNotNullable * @property string $uuidNotNullable
* @property string|null $ipaddressNullable * @property string|null $ipaddressNullable
@@ -143,8 +141,6 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value)
@@ -7,9 +7,9 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhp
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateBasicPhpdocFinal\Models\Post
* *
* @property integer $id *
* @property int $id
* @property string|null $char_nullable * @property string|null $char_nullable
* @property string $char_not_nullable * @property string $char_not_nullable
* @property string|null $string_nullable * @property string|null $string_nullable
@@ -20,36 +20,34 @@ use Illuminate\Database\Eloquent\Model;
* @property string $medium_text_not_nullable * @property string $medium_text_not_nullable
* @property string|null $long_text_nullable * @property string|null $long_text_nullable
* @property string $long_text_not_nullable * @property string $long_text_not_nullable
* @property integer|null $integer_nullable * @property int|null $integer_nullable
* @property integer $integer_not_nullable * @property int $integer_not_nullable
* @property integer|null $tiny_integer_nullable * @property int|null $tiny_integer_nullable
* @property integer $tiny_integer_not_nullable * @property int $tiny_integer_not_nullable
* @property integer|null $small_integer_nullable * @property int|null $small_integer_nullable
* @property integer $small_integer_not_nullable * @property int $small_integer_not_nullable
* @property integer|null $medium_integer_nullable * @property int|null $medium_integer_nullable
* @property integer $medium_integer_not_nullable * @property int $medium_integer_not_nullable
* @property integer|null $big_integer_nullable * @property int|null $big_integer_nullable
* @property integer $big_integer_not_nullable * @property int $big_integer_not_nullable
* @property integer|null $unsigned_integer_nullable * @property int|null $unsigned_integer_nullable
* @property integer $unsigned_integer_not_nullable * @property int $unsigned_integer_not_nullable
* @property integer|null $unsigned_tiny_integer_nullable * @property int|null $unsigned_tiny_integer_nullable
* @property integer $unsigned_tiny_integer_not_nullable * @property int $unsigned_tiny_integer_not_nullable
* @property integer|null $unsigned_small_integer_nullable * @property int|null $unsigned_small_integer_nullable
* @property integer $unsigned_small_integer_not_nullable * @property int $unsigned_small_integer_not_nullable
* @property integer|null $unsigned_medium_integer_nullable * @property int|null $unsigned_medium_integer_nullable
* @property integer $unsigned_medium_integer_not_nullable * @property int $unsigned_medium_integer_not_nullable
* @property integer|null $unsigned_big_integer_nullable * @property int|null $unsigned_big_integer_nullable
* @property integer $unsigned_big_integer_not_nullable * @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable * @property float|null $float_nullable
* @property float $float_not_nullable * @property float $float_not_nullable
* @property float|null $double_nullable * @property float|null $double_nullable
* @property float $double_not_nullable * @property float $double_not_nullable
* @property string|null $decimal_nullable * @property string|null $decimal_nullable
* @property string $decimal_not_nullable * @property string $decimal_not_nullable
* @property string|null $unsigned_decimal_nullable * @property int|null $boolean_nullable
* @property string $unsigned_decimal_not_nullable * @property int $boolean_not_nullable
* @property integer|null $boolean_nullable
* @property integer $boolean_not_nullable
* @property string|null $enum_nullable * @property string|null $enum_nullable
* @property string $enum_not_nullable * @property string $enum_not_nullable
* @property string|null $json_nullable * @property string|null $json_nullable
@@ -70,10 +68,10 @@ use Illuminate\Database\Eloquent\Model;
* @property string $timestamp_not_nullable * @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable * @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable * @property string $timestamptz_not_nullable
* @property integer|null $year_nullable * @property int|null $year_nullable
* @property integer $year_not_nullable * @property int $year_not_nullable
* @property mixed|null $binary_nullable * @property string|null $binary_nullable
* @property mixed $binary_not_nullable * @property string $binary_not_nullable
* @property string|null $uuid_nullable * @property string|null $uuid_nullable
* @property string $uuid_not_nullable * @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable * @property string|null $ipaddress_nullable
@@ -143,8 +141,6 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value)
@@ -0,0 +1,51 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection\Models;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection\NonModels\CollectionModel;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection\NonModels\NonModel;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Illuminate\Support\Collection as IntCollection;
class WithCollection extends Model
{
/**
* @return Collection<int, string>
*/
public function getCollectionAttribute(): Collection
{
return new Collection();
}
/**
* @return Collection
*/
public function getCollectionWithoutTemplateAttribute(): Collection
{
return new Collection();
}
public function getCollectionWithoutDocBlockAttribute(): Collection
{
return new Collection();
}
/**
* @return Collection<int, NonModel>
*/
public function getCollectionWithNonModelTemplateAttribute(): Collection
{
return new Collection();
}
/**
* @return Collection<Collection, CollectionModel<IntCollection, CollectionModel<int, NonModel>>>
*/
public function getCollectionWithNestedTemplateAttribute(): Collection
{
return new Collection();
}
}
@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection\NonModels;
class CollectionModel
{
}
@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection\NonModels;
class NonModel
{
}
@@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
class Test extends AbstractModelsCommand
{
public function test(): void
{
$command = $this->app->make(ModelsCommand::class);
$tester = $this->runCommand($command, [
'--write-mixin' => true,
]);
$this->assertSame(0, $tester->getStatusCode());
$this->assertStringContainsString('Written new phpDocBlock to', $tester->getDisplay());
$this->assertMatchesMockedSnapshot();
}
}
@@ -0,0 +1,85 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection\Models;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection\NonModels\CollectionModel;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection\NonModels\NonModel;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Illuminate\Support\Collection as IntCollection;
/**
* @mixin IdeHelperWithCollection
*/
class WithCollection extends Model
{
/**
* @return Collection<int, string>
*/
public function getCollectionAttribute(): Collection
{
return new Collection();
}
/**
* @return Collection
*/
public function getCollectionWithoutTemplateAttribute(): Collection
{
return new Collection();
}
public function getCollectionWithoutDocBlockAttribute(): Collection
{
return new Collection();
}
/**
* @return Collection<int, NonModel>
*/
public function getCollectionWithNonModelTemplateAttribute(): Collection
{
return new Collection();
}
/**
* @return Collection<Collection, CollectionModel<IntCollection, CollectionModel<int, NonModel>>>
*/
public function getCollectionWithNestedTemplateAttribute(): Collection
{
return new Collection();
}
}
<?php
// @formatter:off
// phpcs:ignoreFile
/**
* A helper file for your Eloquent Models
* Copy the phpDocs from this file to the correct Model,
* And remove them from this file, to prevent double declarations.
*
* @author Barry vd. Heuvel <[email protected]>
*/
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection\Models{
/**
*
*
* @property-read \Illuminate\Support\Collection<int, string> $collection
* @property-read \Illuminate\Support\Collection<\Illuminate\Support\Collection, \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection\NonModels\CollectionModel<\Illuminate\Support\Collection, \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection\NonModels\CollectionModel<int, \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection\NonModels\NonModel>>> $collection_with_nested_template
* @property-read \Illuminate\Support\Collection<int, \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenerateMixinCollection\NonModels\NonModel> $collection_with_non_model_template
* @property-read \Illuminate\Support\Collection $collection_without_doc_block
* @property-read \Illuminate\Support\Collection $collection_without_template
* @method static \Illuminate\Database\Eloquent\Builder|WithCollection newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|WithCollection newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|WithCollection query()
* @mixin \Eloquent
*/
#[\AllowDynamicProperties]
class IdeHelperWithCollection {}
}
@@ -13,9 +13,9 @@
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Models{ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Models{
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Models\Post
* *
* @property integer $id *
* @property int $id
* @property string|null $char_nullable * @property string|null $char_nullable
* @property string $char_not_nullable * @property string $char_not_nullable
* @property string|null $string_nullable * @property string|null $string_nullable
@@ -26,36 +26,34 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWi
* @property string $medium_text_not_nullable * @property string $medium_text_not_nullable
* @property string|null $long_text_nullable * @property string|null $long_text_nullable
* @property string $long_text_not_nullable * @property string $long_text_not_nullable
* @property integer|null $integer_nullable * @property int|null $integer_nullable
* @property integer $integer_not_nullable * @property int $integer_not_nullable
* @property integer|null $tiny_integer_nullable * @property int|null $tiny_integer_nullable
* @property integer $tiny_integer_not_nullable * @property int $tiny_integer_not_nullable
* @property integer|null $small_integer_nullable * @property int|null $small_integer_nullable
* @property integer $small_integer_not_nullable * @property int $small_integer_not_nullable
* @property integer|null $medium_integer_nullable * @property int|null $medium_integer_nullable
* @property integer $medium_integer_not_nullable * @property int $medium_integer_not_nullable
* @property integer|null $big_integer_nullable * @property int|null $big_integer_nullable
* @property integer $big_integer_not_nullable * @property int $big_integer_not_nullable
* @property integer|null $unsigned_integer_nullable * @property int|null $unsigned_integer_nullable
* @property integer $unsigned_integer_not_nullable * @property int $unsigned_integer_not_nullable
* @property integer|null $unsigned_tiny_integer_nullable * @property int|null $unsigned_tiny_integer_nullable
* @property integer $unsigned_tiny_integer_not_nullable * @property int $unsigned_tiny_integer_not_nullable
* @property integer|null $unsigned_small_integer_nullable * @property int|null $unsigned_small_integer_nullable
* @property integer $unsigned_small_integer_not_nullable * @property int $unsigned_small_integer_not_nullable
* @property integer|null $unsigned_medium_integer_nullable * @property int|null $unsigned_medium_integer_nullable
* @property integer $unsigned_medium_integer_not_nullable * @property int $unsigned_medium_integer_not_nullable
* @property integer|null $unsigned_big_integer_nullable * @property int|null $unsigned_big_integer_nullable
* @property integer $unsigned_big_integer_not_nullable * @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable * @property float|null $float_nullable
* @property float $float_not_nullable * @property float $float_not_nullable
* @property float|null $double_nullable * @property float|null $double_nullable
* @property float $double_not_nullable * @property float $double_not_nullable
* @property string|null $decimal_nullable * @property string|null $decimal_nullable
* @property string $decimal_not_nullable * @property string $decimal_not_nullable
* @property string|null $unsigned_decimal_nullable * @property int|null $boolean_nullable
* @property string $unsigned_decimal_not_nullable * @property int $boolean_not_nullable
* @property integer|null $boolean_nullable
* @property integer $boolean_not_nullable
* @property string|null $enum_nullable * @property string|null $enum_nullable
* @property string $enum_not_nullable * @property string $enum_not_nullable
* @property string|null $json_nullable * @property string|null $json_nullable
@@ -76,10 +74,10 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWi
* @property string $timestamp_not_nullable * @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable * @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable * @property string $timestamptz_not_nullable
* @property integer|null $year_nullable * @property int|null $year_nullable
* @property integer $year_not_nullable * @property int $year_not_nullable
* @property mixed|null $binary_nullable * @property string|null $binary_nullable
* @property mixed $binary_not_nullable * @property string $binary_not_nullable
* @property string|null $uuid_nullable * @property string|null $uuid_nullable
* @property string $uuid_not_nullable * @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable * @property string|null $ipaddress_nullable
@@ -152,8 +150,6 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWi
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereTinyIntegerNullable($value) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereTinyIntegerNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereUnsignedBigIntegerNotNullable($value) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereUnsignedBigIntegerNotNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereUnsignedBigIntegerNullable($value) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereUnsignedBigIntegerNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereUnsignedDecimalNotNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereUnsignedDecimalNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereUnsignedIntegerNotNullable($value) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereUnsignedIntegerNotNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereUnsignedIntegerNullable($value) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereUnsignedIntegerNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereUnsignedMediumIntegerNotNullable($value) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post whereUnsignedMediumIntegerNotNullable($value)
@@ -8,9 +8,9 @@ use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExte
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilderWithFqn\Models\Post
* *
* @property integer $id *
* @property int $id
* @property string|null $char_nullable * @property string|null $char_nullable
* @property string $char_not_nullable * @property string $char_not_nullable
* @property string|null $string_nullable * @property string|null $string_nullable
@@ -21,36 +21,34 @@ use Illuminate\Database\Eloquent\Model;
* @property string $medium_text_not_nullable * @property string $medium_text_not_nullable
* @property string|null $long_text_nullable * @property string|null $long_text_nullable
* @property string $long_text_not_nullable * @property string $long_text_not_nullable
* @property integer|null $integer_nullable * @property int|null $integer_nullable
* @property integer $integer_not_nullable * @property int $integer_not_nullable
* @property integer|null $tiny_integer_nullable * @property int|null $tiny_integer_nullable
* @property integer $tiny_integer_not_nullable * @property int $tiny_integer_not_nullable
* @property integer|null $small_integer_nullable * @property int|null $small_integer_nullable
* @property integer $small_integer_not_nullable * @property int $small_integer_not_nullable
* @property integer|null $medium_integer_nullable * @property int|null $medium_integer_nullable
* @property integer $medium_integer_not_nullable * @property int $medium_integer_not_nullable
* @property integer|null $big_integer_nullable * @property int|null $big_integer_nullable
* @property integer $big_integer_not_nullable * @property int $big_integer_not_nullable
* @property integer|null $unsigned_integer_nullable * @property int|null $unsigned_integer_nullable
* @property integer $unsigned_integer_not_nullable * @property int $unsigned_integer_not_nullable
* @property integer|null $unsigned_tiny_integer_nullable * @property int|null $unsigned_tiny_integer_nullable
* @property integer $unsigned_tiny_integer_not_nullable * @property int $unsigned_tiny_integer_not_nullable
* @property integer|null $unsigned_small_integer_nullable * @property int|null $unsigned_small_integer_nullable
* @property integer $unsigned_small_integer_not_nullable * @property int $unsigned_small_integer_not_nullable
* @property integer|null $unsigned_medium_integer_nullable * @property int|null $unsigned_medium_integer_nullable
* @property integer $unsigned_medium_integer_not_nullable * @property int $unsigned_medium_integer_not_nullable
* @property integer|null $unsigned_big_integer_nullable * @property int|null $unsigned_big_integer_nullable
* @property integer $unsigned_big_integer_not_nullable * @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable * @property float|null $float_nullable
* @property float $float_not_nullable * @property float $float_not_nullable
* @property float|null $double_nullable * @property float|null $double_nullable
* @property float $double_not_nullable * @property float $double_not_nullable
* @property string|null $decimal_nullable * @property string|null $decimal_nullable
* @property string $decimal_not_nullable * @property string $decimal_not_nullable
* @property string|null $unsigned_decimal_nullable * @property int|null $boolean_nullable
* @property string $unsigned_decimal_not_nullable * @property int $boolean_not_nullable
* @property integer|null $boolean_nullable
* @property integer $boolean_not_nullable
* @property string|null $enum_nullable * @property string|null $enum_nullable
* @property string $enum_not_nullable * @property string $enum_not_nullable
* @property string|null $json_nullable * @property string|null $json_nullable
@@ -71,10 +69,10 @@ use Illuminate\Database\Eloquent\Model;
* @property string $timestamp_not_nullable * @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable * @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable * @property string $timestamptz_not_nullable
* @property integer|null $year_nullable * @property int|null $year_nullable
* @property integer $year_not_nullable * @property int $year_not_nullable
* @property mixed|null $binary_nullable * @property string|null $binary_nullable
* @property mixed $binary_not_nullable * @property string $binary_not_nullable
* @property string|null $uuid_nullable * @property string|null $uuid_nullable
* @property string $uuid_not_nullable * @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable * @property string|null $ipaddress_nullable
@@ -147,8 +145,6 @@ use Illuminate\Database\Eloquent\Model;
* @method static PostExternalQueryBuilder|Post whereTinyIntegerNullable($value) * @method static PostExternalQueryBuilder|Post whereTinyIntegerNullable($value)
* @method static PostExternalQueryBuilder|Post whereUnsignedBigIntegerNotNullable($value) * @method static PostExternalQueryBuilder|Post whereUnsignedBigIntegerNotNullable($value)
* @method static PostExternalQueryBuilder|Post whereUnsignedBigIntegerNullable($value) * @method static PostExternalQueryBuilder|Post whereUnsignedBigIntegerNullable($value)
* @method static PostExternalQueryBuilder|Post whereUnsignedDecimalNotNullable($value)
* @method static PostExternalQueryBuilder|Post whereUnsignedDecimalNullable($value)
* @method static PostExternalQueryBuilder|Post whereUnsignedIntegerNotNullable($value) * @method static PostExternalQueryBuilder|Post whereUnsignedIntegerNotNullable($value)
* @method static PostExternalQueryBuilder|Post whereUnsignedIntegerNullable($value) * @method static PostExternalQueryBuilder|Post whereUnsignedIntegerNullable($value)
* @method static PostExternalQueryBuilder|Post whereUnsignedMediumIntegerNotNullable($value) * @method static PostExternalQueryBuilder|Post whereUnsignedMediumIntegerNotNullable($value)
@@ -9,9 +9,9 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post
* *
* @property integer $id *
* @property int $id
* @property string|null $char_nullable * @property string|null $char_nullable
* @property string $char_not_nullable * @property string $char_not_nullable
* @property string|null $string_nullable * @property string|null $string_nullable
@@ -22,36 +22,34 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @property string $medium_text_not_nullable * @property string $medium_text_not_nullable
* @property string|null $long_text_nullable * @property string|null $long_text_nullable
* @property string $long_text_not_nullable * @property string $long_text_not_nullable
* @property integer|null $integer_nullable * @property int|null $integer_nullable
* @property integer $integer_not_nullable * @property int $integer_not_nullable
* @property integer|null $tiny_integer_nullable * @property int|null $tiny_integer_nullable
* @property integer $tiny_integer_not_nullable * @property int $tiny_integer_not_nullable
* @property integer|null $small_integer_nullable * @property int|null $small_integer_nullable
* @property integer $small_integer_not_nullable * @property int $small_integer_not_nullable
* @property integer|null $medium_integer_nullable * @property int|null $medium_integer_nullable
* @property integer $medium_integer_not_nullable * @property int $medium_integer_not_nullable
* @property integer|null $big_integer_nullable * @property int|null $big_integer_nullable
* @property integer $big_integer_not_nullable * @property int $big_integer_not_nullable
* @property integer|null $unsigned_integer_nullable * @property int|null $unsigned_integer_nullable
* @property integer $unsigned_integer_not_nullable * @property int $unsigned_integer_not_nullable
* @property integer|null $unsigned_tiny_integer_nullable * @property int|null $unsigned_tiny_integer_nullable
* @property integer $unsigned_tiny_integer_not_nullable * @property int $unsigned_tiny_integer_not_nullable
* @property integer|null $unsigned_small_integer_nullable * @property int|null $unsigned_small_integer_nullable
* @property integer $unsigned_small_integer_not_nullable * @property int $unsigned_small_integer_not_nullable
* @property integer|null $unsigned_medium_integer_nullable * @property int|null $unsigned_medium_integer_nullable
* @property integer $unsigned_medium_integer_not_nullable * @property int $unsigned_medium_integer_not_nullable
* @property integer|null $unsigned_big_integer_nullable * @property int|null $unsigned_big_integer_nullable
* @property integer $unsigned_big_integer_not_nullable * @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable * @property float|null $float_nullable
* @property float $float_not_nullable * @property float $float_not_nullable
* @property float|null $double_nullable * @property float|null $double_nullable
* @property float $double_not_nullable * @property float $double_not_nullable
* @property string|null $decimal_nullable * @property string|null $decimal_nullable
* @property string $decimal_not_nullable * @property string $decimal_not_nullable
* @property string|null $unsigned_decimal_nullable * @property int|null $boolean_nullable
* @property string $unsigned_decimal_not_nullable * @property int $boolean_not_nullable
* @property integer|null $boolean_nullable
* @property integer $boolean_not_nullable
* @property string|null $enum_nullable * @property string|null $enum_nullable
* @property string $enum_not_nullable * @property string $enum_not_nullable
* @property string|null $json_nullable * @property string|null $json_nullable
@@ -72,10 +70,10 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @property string $timestamp_not_nullable * @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable * @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable * @property string $timestamptz_not_nullable
* @property integer|null $year_nullable * @property int|null $year_nullable
* @property integer $year_not_nullable * @property int $year_not_nullable
* @property mixed|null $binary_nullable * @property string|null $binary_nullable
* @property mixed $binary_not_nullable * @property string $binary_not_nullable
* @property string|null $uuid_nullable * @property string|null $uuid_nullable
* @property string $uuid_not_nullable * @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable * @property string|null $ipaddress_nullable
@@ -149,8 +147,6 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereTinyIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereTinyIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereUnsignedBigIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereUnsignedBigIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereUnsignedBigIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereUnsignedBigIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereUnsignedDecimalNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereUnsignedDecimalNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereUnsignedIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereUnsignedIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereUnsignedIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereUnsignedIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereUnsignedMediumIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|\Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithForcedFqn\Models\Post whereUnsignedMediumIntegerNotNullable($value)
@@ -15,9 +15,9 @@ use Illuminate\Database\Query\Builder as QueryBuilder;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqn\Models\Post
* *
* @property integer $id *
* @property int $id
* @property string|null $char_nullable * @property string|null $char_nullable
* @property CastType $char_not_nullable * @property CastType $char_not_nullable
* @property string|null $string_nullable * @property string|null $string_nullable
@@ -28,36 +28,34 @@ use Illuminate\Support\Carbon;
* @property string $medium_text_not_nullable * @property string $medium_text_not_nullable
* @property string|null $long_text_nullable * @property string|null $long_text_nullable
* @property string $long_text_not_nullable * @property string $long_text_not_nullable
* @property integer|null $integer_nullable * @property int|null $integer_nullable
* @property integer $integer_not_nullable * @property int $integer_not_nullable
* @property integer|null $tiny_integer_nullable * @property int|null $tiny_integer_nullable
* @property integer $tiny_integer_not_nullable * @property int $tiny_integer_not_nullable
* @property integer|null $small_integer_nullable * @property int|null $small_integer_nullable
* @property integer $small_integer_not_nullable * @property int $small_integer_not_nullable
* @property integer|null $medium_integer_nullable * @property int|null $medium_integer_nullable
* @property integer $medium_integer_not_nullable * @property int $medium_integer_not_nullable
* @property integer|null $big_integer_nullable * @property int|null $big_integer_nullable
* @property integer $big_integer_not_nullable * @property int $big_integer_not_nullable
* @property integer|null $unsigned_integer_nullable * @property int|null $unsigned_integer_nullable
* @property integer $unsigned_integer_not_nullable * @property int $unsigned_integer_not_nullable
* @property integer|null $unsigned_tiny_integer_nullable * @property int|null $unsigned_tiny_integer_nullable
* @property integer $unsigned_tiny_integer_not_nullable * @property int $unsigned_tiny_integer_not_nullable
* @property integer|null $unsigned_small_integer_nullable * @property int|null $unsigned_small_integer_nullable
* @property integer $unsigned_small_integer_not_nullable * @property int $unsigned_small_integer_not_nullable
* @property integer|null $unsigned_medium_integer_nullable * @property int|null $unsigned_medium_integer_nullable
* @property integer $unsigned_medium_integer_not_nullable * @property int $unsigned_medium_integer_not_nullable
* @property integer|null $unsigned_big_integer_nullable * @property int|null $unsigned_big_integer_nullable
* @property integer $unsigned_big_integer_not_nullable * @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable * @property float|null $float_nullable
* @property float $float_not_nullable * @property float $float_not_nullable
* @property float|null $double_nullable * @property float|null $double_nullable
* @property float $double_not_nullable * @property float $double_not_nullable
* @property string|null $decimal_nullable * @property string|null $decimal_nullable
* @property string $decimal_not_nullable * @property string $decimal_not_nullable
* @property string|null $unsigned_decimal_nullable * @property int|null $boolean_nullable
* @property string $unsigned_decimal_not_nullable * @property int $boolean_not_nullable
* @property integer|null $boolean_nullable
* @property integer $boolean_not_nullable
* @property string|null $enum_nullable * @property string|null $enum_nullable
* @property string $enum_not_nullable * @property string $enum_not_nullable
* @property string|null $json_nullable * @property string|null $json_nullable
@@ -78,10 +76,10 @@ use Illuminate\Support\Carbon;
* @property string $timestamp_not_nullable * @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable * @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable * @property string $timestamptz_not_nullable
* @property integer|null $year_nullable * @property int|null $year_nullable
* @property integer $year_not_nullable * @property int $year_not_nullable
* @property mixed|null $binary_nullable * @property string|null $binary_nullable
* @property mixed $binary_not_nullable * @property string $binary_not_nullable
* @property string|null $uuid_nullable * @property string|null $uuid_nullable
* @property string $uuid_not_nullable * @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable * @property string|null $ipaddress_nullable
@@ -155,8 +153,6 @@ use Illuminate\Support\Carbon;
* @method static EloquentBuilder|Post whereTinyIntegerNullable($value) * @method static EloquentBuilder|Post whereTinyIntegerNullable($value)
* @method static EloquentBuilder|Post whereUnsignedBigIntegerNotNullable($value) * @method static EloquentBuilder|Post whereUnsignedBigIntegerNotNullable($value)
* @method static EloquentBuilder|Post whereUnsignedBigIntegerNullable($value) * @method static EloquentBuilder|Post whereUnsignedBigIntegerNullable($value)
* @method static EloquentBuilder|Post whereUnsignedDecimalNotNullable($value)
* @method static EloquentBuilder|Post whereUnsignedDecimalNullable($value)
* @method static EloquentBuilder|Post whereUnsignedIntegerNotNullable($value) * @method static EloquentBuilder|Post whereUnsignedIntegerNotNullable($value)
* @method static EloquentBuilder|Post whereUnsignedIntegerNullable($value) * @method static EloquentBuilder|Post whereUnsignedIntegerNullable($value)
* @method static EloquentBuilder|Post whereUnsignedMediumIntegerNotNullable($value) * @method static EloquentBuilder|Post whereUnsignedMediumIntegerNotNullable($value)
@@ -13,9 +13,9 @@
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Models{ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Models{
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Models\Post
* *
* @property integer $id *
* @property int $id
* @property string|null $char_nullable * @property string|null $char_nullable
* @property string $char_not_nullable * @property string $char_not_nullable
* @property string|null $string_nullable * @property string|null $string_nullable
@@ -26,36 +26,34 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWi
* @property string $medium_text_not_nullable * @property string $medium_text_not_nullable
* @property string|null $long_text_nullable * @property string|null $long_text_nullable
* @property string $long_text_not_nullable * @property string $long_text_not_nullable
* @property integer|null $integer_nullable * @property int|null $integer_nullable
* @property integer $integer_not_nullable * @property int $integer_not_nullable
* @property integer|null $tiny_integer_nullable * @property int|null $tiny_integer_nullable
* @property integer $tiny_integer_not_nullable * @property int $tiny_integer_not_nullable
* @property integer|null $small_integer_nullable * @property int|null $small_integer_nullable
* @property integer $small_integer_not_nullable * @property int $small_integer_not_nullable
* @property integer|null $medium_integer_nullable * @property int|null $medium_integer_nullable
* @property integer $medium_integer_not_nullable * @property int $medium_integer_not_nullable
* @property integer|null $big_integer_nullable * @property int|null $big_integer_nullable
* @property integer $big_integer_not_nullable * @property int $big_integer_not_nullable
* @property integer|null $unsigned_integer_nullable * @property int|null $unsigned_integer_nullable
* @property integer $unsigned_integer_not_nullable * @property int $unsigned_integer_not_nullable
* @property integer|null $unsigned_tiny_integer_nullable * @property int|null $unsigned_tiny_integer_nullable
* @property integer $unsigned_tiny_integer_not_nullable * @property int $unsigned_tiny_integer_not_nullable
* @property integer|null $unsigned_small_integer_nullable * @property int|null $unsigned_small_integer_nullable
* @property integer $unsigned_small_integer_not_nullable * @property int $unsigned_small_integer_not_nullable
* @property integer|null $unsigned_medium_integer_nullable * @property int|null $unsigned_medium_integer_nullable
* @property integer $unsigned_medium_integer_not_nullable * @property int $unsigned_medium_integer_not_nullable
* @property integer|null $unsigned_big_integer_nullable * @property int|null $unsigned_big_integer_nullable
* @property integer $unsigned_big_integer_not_nullable * @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable * @property float|null $float_nullable
* @property float $float_not_nullable * @property float $float_not_nullable
* @property float|null $double_nullable * @property float|null $double_nullable
* @property float $double_not_nullable * @property float $double_not_nullable
* @property string|null $decimal_nullable * @property string|null $decimal_nullable
* @property string $decimal_not_nullable * @property string $decimal_not_nullable
* @property string|null $unsigned_decimal_nullable * @property int|null $boolean_nullable
* @property string $unsigned_decimal_not_nullable * @property int $boolean_not_nullable
* @property integer|null $boolean_nullable
* @property integer $boolean_not_nullable
* @property string|null $enum_nullable * @property string|null $enum_nullable
* @property string $enum_not_nullable * @property string $enum_not_nullable
* @property string|null $json_nullable * @property string|null $json_nullable
@@ -76,10 +74,10 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWi
* @property string $timestamp_not_nullable * @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable * @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable * @property string $timestamptz_not_nullable
* @property integer|null $year_nullable * @property int|null $year_nullable
* @property integer $year_not_nullable * @property int $year_not_nullable
* @property mixed|null $binary_nullable * @property string|null $binary_nullable
* @property mixed $binary_not_nullable * @property string $binary_not_nullable
* @property string|null $uuid_nullable * @property string|null $uuid_nullable
* @property string $uuid_not_nullable * @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable * @property string|null $ipaddress_nullable
@@ -149,8 +147,6 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWi
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereTinyIntegerNullable($value) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereTinyIntegerNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereUnsignedBigIntegerNotNullable($value) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereUnsignedBigIntegerNotNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereUnsignedBigIntegerNullable($value) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereUnsignedBigIntegerNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereUnsignedDecimalNotNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereUnsignedDecimalNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereUnsignedIntegerNotNullable($value) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereUnsignedIntegerNotNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereUnsignedIntegerNullable($value) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereUnsignedIntegerNullable($value)
* @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereUnsignedMediumIntegerNotNullable($value) * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithFqnInExternalFile\Builders\EMaterialQueryBuilder|Post whereUnsignedMediumIntegerNotNullable($value)
@@ -0,0 +1,16 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithMixin\Models;
use Illuminate\Database\Eloquent\Model;
/**
* @property $someProp
* @method someMethod(string $method)
* @mixin IdeHelperPost
*/
final class FinalPost extends Model
{
}
@@ -6,6 +6,22 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWi
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/**
* @property $someProp
* @method someMethod(string $method)
* @mixin IdeHelperFinalPost
*/
final class FinalPost extends Model
{
}
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithMixin\Models;
use Illuminate\Database\Eloquent\Model;
/** /**
* @property $someProp * @property $someProp
* @method someMethod(string $method) * @method someMethod(string $method)
@@ -29,11 +45,26 @@ class Post extends Model
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithMixin\Models{ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithMixin\Models{
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithMixin\Models\Post *
* *
* @property $someProp * @property $someProp
* @method someMethod(string $method) * @method someMethod(string $method)
* @property integer $id * @method static \Illuminate\Database\Eloquent\Builder|FinalPost newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|FinalPost newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|FinalPost query()
* @mixin \Eloquent
*/
#[\AllowDynamicProperties]
final class IdeHelperFinalPost {}
}
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithMixin\Models{
/**
*
*
* @property $someProp
* @method someMethod(string $method)
* @property int $id
* @property string|null $char_nullable * @property string|null $char_nullable
* @property string $char_not_nullable * @property string $char_not_nullable
* @property string|null $string_nullable * @property string|null $string_nullable
@@ -44,36 +75,34 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWi
* @property string $medium_text_not_nullable * @property string $medium_text_not_nullable
* @property string|null $long_text_nullable * @property string|null $long_text_nullable
* @property string $long_text_not_nullable * @property string $long_text_not_nullable
* @property integer|null $integer_nullable * @property int|null $integer_nullable
* @property integer $integer_not_nullable * @property int $integer_not_nullable
* @property integer|null $tiny_integer_nullable * @property int|null $tiny_integer_nullable
* @property integer $tiny_integer_not_nullable * @property int $tiny_integer_not_nullable
* @property integer|null $small_integer_nullable * @property int|null $small_integer_nullable
* @property integer $small_integer_not_nullable * @property int $small_integer_not_nullable
* @property integer|null $medium_integer_nullable * @property int|null $medium_integer_nullable
* @property integer $medium_integer_not_nullable * @property int $medium_integer_not_nullable
* @property integer|null $big_integer_nullable * @property int|null $big_integer_nullable
* @property integer $big_integer_not_nullable * @property int $big_integer_not_nullable
* @property integer|null $unsigned_integer_nullable * @property int|null $unsigned_integer_nullable
* @property integer $unsigned_integer_not_nullable * @property int $unsigned_integer_not_nullable
* @property integer|null $unsigned_tiny_integer_nullable * @property int|null $unsigned_tiny_integer_nullable
* @property integer $unsigned_tiny_integer_not_nullable * @property int $unsigned_tiny_integer_not_nullable
* @property integer|null $unsigned_small_integer_nullable * @property int|null $unsigned_small_integer_nullable
* @property integer $unsigned_small_integer_not_nullable * @property int $unsigned_small_integer_not_nullable
* @property integer|null $unsigned_medium_integer_nullable * @property int|null $unsigned_medium_integer_nullable
* @property integer $unsigned_medium_integer_not_nullable * @property int $unsigned_medium_integer_not_nullable
* @property integer|null $unsigned_big_integer_nullable * @property int|null $unsigned_big_integer_nullable
* @property integer $unsigned_big_integer_not_nullable * @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable * @property float|null $float_nullable
* @property float $float_not_nullable * @property float $float_not_nullable
* @property float|null $double_nullable * @property float|null $double_nullable
* @property float $double_not_nullable * @property float $double_not_nullable
* @property string|null $decimal_nullable * @property string|null $decimal_nullable
* @property string $decimal_not_nullable * @property string $decimal_not_nullable
* @property string|null $unsigned_decimal_nullable * @property int|null $boolean_nullable
* @property string $unsigned_decimal_not_nullable * @property int $boolean_not_nullable
* @property integer|null $boolean_nullable
* @property integer $boolean_not_nullable
* @property string|null $enum_nullable * @property string|null $enum_nullable
* @property string $enum_not_nullable * @property string $enum_not_nullable
* @property string|null $json_nullable * @property string|null $json_nullable
@@ -94,10 +123,10 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWi
* @property string $timestamp_not_nullable * @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable * @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable * @property string $timestamptz_not_nullable
* @property integer|null $year_nullable * @property int|null $year_nullable
* @property integer $year_not_nullable * @property int $year_not_nullable
* @property mixed|null $binary_nullable * @property string|null $binary_nullable
* @property mixed $binary_not_nullable * @property string $binary_not_nullable
* @property string|null $uuid_nullable * @property string|null $uuid_nullable
* @property string $uuid_not_nullable * @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable * @property string|null $ipaddress_nullable
@@ -167,8 +196,6 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWi
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value)
@@ -184,6 +211,7 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWi
* @method static \Illuminate\Database\Eloquent\Builder|Post whereYearNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereYearNullable($value)
* @mixin \Eloquent * @mixin \Eloquent
*/ */
#[\AllowDynamicProperties]
class IdeHelperPost {} class IdeHelperPost {}
} }
@@ -9,9 +9,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GenericsSyntaxDisabled\Models\Simple
* *
* @property integer $id *
* @property int $id
* @property-read \Illuminate\Database\Eloquent\Collection|Simple[] $regularBelongsToMany * @property-read \Illuminate\Database\Eloquent\Collection|Simple[] $regularBelongsToMany
* @property-read int|null $regular_belongs_to_many_count * @property-read int|null $regular_belongs_to_many_count
* @property-read \Illuminate\Database\Eloquent\Collection|Simple[] $regularHasMany * @property-read \Illuminate\Database\Eloquent\Collection|Simple[] $regularHasMany
@@ -8,9 +8,9 @@ use DateTime;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Getter\Models\Simple
* *
* @property integer $id *
* @property int $id
* @property-read int|null $attribute_return_type_int_or_null * @property-read int|null $attribute_return_type_int_or_null
* @property-read array $attribute_returns_array * @property-read array $attribute_returns_array
* @property-read bool $attribute_returns_bool * @property-read bool $attribute_returns_bool
@@ -7,7 +7,7 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Ignored\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Ignored\Models\NotIgnored *
* *
* @method static \Illuminate\Database\Eloquent\Builder|NotIgnored newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|NotIgnored newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|NotIgnored newQuery() * @method static \Illuminate\Database\Eloquent\Builder|NotIgnored newQuery()
@@ -19,6 +19,11 @@ class User extends Model implements Authenticatable
// TODO: Implement getAuthIdentifier() method. // TODO: Implement getAuthIdentifier() method.
} }
public function getAuthPasswordName()
{
// TODO: Implement getAuthPasswordName() method.
}
public function getAuthPassword() public function getAuthPassword()
{ {
// TODO: Implement getAuthPassword() method. // TODO: Implement getAuthPassword() method.
@@ -13,7 +13,7 @@
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Interfaces\Models{ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Interfaces\Models{
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Interfaces\Models\User *
* *
* @method static \Illuminate\Database\Eloquent\Builder|User newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|User newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|User newQuery() * @method static \Illuminate\Database\Eloquent\Builder|User newQuery()
@@ -0,0 +1,21 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;
class CustomCasterWithStaticReturnType implements CastsAttributes
{
public function get(Model $model, string $key, mixed $value, array $attributes): static
{
// TODO: Implement get() method.
}
public function set(Model $model, string $key, mixed $value, array $attributes): array
{
// TODO: Implement set() method.
}
}
@@ -15,6 +15,7 @@ use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Cas
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithPrimitiveDocblockReturn; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithPrimitiveDocblockReturn;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithPrimitiveReturn; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithPrimitiveReturn;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithReturnType; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithReturnType;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithStaticReturnType;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\ExtendedSelfCastingCasterWithStaticDocblockReturn; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\ExtendedSelfCastingCasterWithStaticDocblockReturn;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\ExtendedSelfCastingCasterWithThisDocblockReturn; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\ExtendedSelfCastingCasterWithThisDocblockReturn;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\InboundAttributeCaster; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\InboundAttributeCaster;
@@ -26,6 +27,7 @@ class CustomCast extends Model
{ {
protected $casts = [ protected $casts = [
'casted_property_with_return_type' => CustomCasterWithReturnType::class, 'casted_property_with_return_type' => CustomCasterWithReturnType::class,
'casted_property_with_static_return_type' => CustomCasterWithStaticReturnType::class,
'casted_property_with_return_docblock' => CustomCasterWithDocblockReturn::class, 'casted_property_with_return_docblock' => CustomCasterWithDocblockReturn::class,
'casted_property_with_return_docblock_fqn' => CustomCasterWithDocblockReturnFqn::class, 'casted_property_with_return_docblock_fqn' => CustomCasterWithDocblockReturnFqn::class,
'casted_property_with_return_primitive' => CustomCasterWithPrimitiveReturn::class, 'casted_property_with_return_primitive' => CustomCasterWithPrimitiveReturn::class,
@@ -15,6 +15,7 @@ use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Cas
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithPrimitiveDocblockReturn; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithPrimitiveDocblockReturn;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithPrimitiveReturn; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithPrimitiveReturn;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithReturnType; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithReturnType;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CustomCasterWithStaticReturnType;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\ExtendedSelfCastingCasterWithStaticDocblockReturn; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\ExtendedSelfCastingCasterWithStaticDocblockReturn;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\ExtendedSelfCastingCasterWithThisDocblockReturn; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\ExtendedSelfCastingCasterWithThisDocblockReturn;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\InboundAttributeCaster; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\InboundAttributeCaster;
@@ -23,7 +24,7 @@ use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Cas
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Models\CustomCast *
* *
* @property \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CastedProperty $casted_property_with_return_type * @property \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CastedProperty $casted_property_with_return_type
* @property \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CastedProperty $casted_property_with_return_docblock * @property \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CastedProperty $casted_property_with_return_docblock
@@ -39,6 +40,7 @@ use Illuminate\Database\Eloquent\Model;
* @property ExtendedSelfCastingCasterWithStaticDocblockReturn $extended_casted_property_with_static_return_docblock * @property ExtendedSelfCastingCasterWithStaticDocblockReturn $extended_casted_property_with_static_return_docblock
* @property ExtendedSelfCastingCasterWithThisDocblockReturn $extended_casted_property_with_this_return_docblock * @property ExtendedSelfCastingCasterWithThisDocblockReturn $extended_casted_property_with_this_return_docblock
* @property SelfCastingCasterWithStaticDocblockReturn $casted_property_with_static_return_docblock_and_param * @property SelfCastingCasterWithStaticDocblockReturn $casted_property_with_static_return_docblock_and_param
* @property CustomCasterWithStaticReturnType $casted_property_with_static_return_type
* @property \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CastedProperty $casted_property_with_castable * @property \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CastedProperty $casted_property_with_castable
* @property \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CastedProperty $casted_property_with_anonymous_cast * @property \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\LaravelCustomCasts\Casts\CastedProperty $casted_property_with_anonymous_cast
* @property CastableWithoutReturnType $casted_property_without_return_type * @property CastableWithoutReturnType $casted_property_without_return_type
@@ -67,6 +69,7 @@ class CustomCast extends Model
{ {
protected $casts = [ protected $casts = [
'casted_property_with_return_type' => CustomCasterWithReturnType::class, 'casted_property_with_return_type' => CustomCasterWithReturnType::class,
'casted_property_with_static_return_type' => CustomCasterWithStaticReturnType::class,
'casted_property_with_return_docblock' => CustomCasterWithDocblockReturn::class, 'casted_property_with_return_docblock' => CustomCasterWithDocblockReturn::class,
'casted_property_with_return_docblock_fqn' => CustomCasterWithDocblockReturnFqn::class, 'casted_property_with_return_docblock_fqn' => CustomCasterWithDocblockReturnFqn::class,
'casted_property_with_return_primitive' => CustomCasterWithPrimitiveReturn::class, 'casted_property_with_return_primitive' => CustomCasterWithPrimitiveReturn::class,
@@ -7,9 +7,9 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\MagicWhere\Model
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\MagicWhere\Models\Post
* *
* @property integer $id *
* @property int $id
* @property string|null $char_nullable * @property string|null $char_nullable
* @property string $char_not_nullable * @property string $char_not_nullable
* @property string|null $string_nullable * @property string|null $string_nullable
@@ -20,36 +20,34 @@ use Illuminate\Database\Eloquent\Model;
* @property string $medium_text_not_nullable * @property string $medium_text_not_nullable
* @property string|null $long_text_nullable * @property string|null $long_text_nullable
* @property string $long_text_not_nullable * @property string $long_text_not_nullable
* @property integer|null $integer_nullable * @property int|null $integer_nullable
* @property integer $integer_not_nullable * @property int $integer_not_nullable
* @property integer|null $tiny_integer_nullable * @property int|null $tiny_integer_nullable
* @property integer $tiny_integer_not_nullable * @property int $tiny_integer_not_nullable
* @property integer|null $small_integer_nullable * @property int|null $small_integer_nullable
* @property integer $small_integer_not_nullable * @property int $small_integer_not_nullable
* @property integer|null $medium_integer_nullable * @property int|null $medium_integer_nullable
* @property integer $medium_integer_not_nullable * @property int $medium_integer_not_nullable
* @property integer|null $big_integer_nullable * @property int|null $big_integer_nullable
* @property integer $big_integer_not_nullable * @property int $big_integer_not_nullable
* @property integer|null $unsigned_integer_nullable * @property int|null $unsigned_integer_nullable
* @property integer $unsigned_integer_not_nullable * @property int $unsigned_integer_not_nullable
* @property integer|null $unsigned_tiny_integer_nullable * @property int|null $unsigned_tiny_integer_nullable
* @property integer $unsigned_tiny_integer_not_nullable * @property int $unsigned_tiny_integer_not_nullable
* @property integer|null $unsigned_small_integer_nullable * @property int|null $unsigned_small_integer_nullable
* @property integer $unsigned_small_integer_not_nullable * @property int $unsigned_small_integer_not_nullable
* @property integer|null $unsigned_medium_integer_nullable * @property int|null $unsigned_medium_integer_nullable
* @property integer $unsigned_medium_integer_not_nullable * @property int $unsigned_medium_integer_not_nullable
* @property integer|null $unsigned_big_integer_nullable * @property int|null $unsigned_big_integer_nullable
* @property integer $unsigned_big_integer_not_nullable * @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable * @property float|null $float_nullable
* @property float $float_not_nullable * @property float $float_not_nullable
* @property float|null $double_nullable * @property float|null $double_nullable
* @property float $double_not_nullable * @property float $double_not_nullable
* @property string|null $decimal_nullable * @property string|null $decimal_nullable
* @property string $decimal_not_nullable * @property string $decimal_not_nullable
* @property string|null $unsigned_decimal_nullable * @property int|null $boolean_nullable
* @property string $unsigned_decimal_not_nullable * @property int $boolean_not_nullable
* @property integer|null $boolean_nullable
* @property integer $boolean_not_nullable
* @property string|null $enum_nullable * @property string|null $enum_nullable
* @property string $enum_not_nullable * @property string $enum_not_nullable
* @property string|null $json_nullable * @property string|null $json_nullable
@@ -70,10 +68,10 @@ use Illuminate\Database\Eloquent\Model;
* @property string $timestamp_not_nullable * @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable * @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable * @property string $timestamptz_not_nullable
* @property integer|null $year_nullable * @property int|null $year_nullable
* @property integer $year_not_nullable * @property int $year_not_nullable
* @property mixed|null $binary_nullable * @property string|null $binary_nullable
* @property mixed $binary_not_nullable * @property string $binary_not_nullable
* @property string|null $uuid_nullable * @property string|null $uuid_nullable
* @property string $uuid_not_nullable * @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable * @property string|null $ipaddress_nullable
@@ -12,6 +12,6 @@ class UnsetMethod implements ModelHookInterface
{ {
public function run(ModelsCommand $command, Model $model): void public function run(ModelsCommand $command, Model $model): void
{ {
$command->unsetMethod('query'); $command->unsetMethod('newmodelquery');
} }
} }
@@ -71,13 +71,13 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Model
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Models\Simple *
* *
* @property int $id * @property int $id
* @property-read string $custom * @property-read string $custom
* @method static \Illuminate\Database\Eloquent\Builder|Simple custom($custom) * @method static \Illuminate\Database\Eloquent\Builder|Simple custom($custom)
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple query()
* @method static \Illuminate\Database\Eloquent\Builder|Simple whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Simple whereId($value)
* @mixin \Eloquent * @mixin \Eloquent
*/ */
@@ -0,0 +1,21 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Morphs\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphTo;
class Morphs extends Model
{
public function relationMorphTo(): MorphTo
{
return $this->morphTo();
}
public function nullableRelationMorphTo(): MorphTo
{
return $this->morphTo();
}
}
@@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Morphs;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
class Test extends AbstractModelsCommand
{
public function test(): void
{
$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,39 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Morphs\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphTo;
/**
*
*
* @property string $relation_morph_to_type
* @property int $relation_morph_to_id
* @property string|null $nullable_relation_morph_to_type
* @property int|null $nullable_relation_morph_to_id
* @property-read Model|\Eloquent|null $nullableRelationMorphTo
* @property-read Model|\Eloquent $relationMorphTo
* @method static \Illuminate\Database\Eloquent\Builder|Morphs newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Morphs newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Morphs query()
* @method static \Illuminate\Database\Eloquent\Builder|Morphs whereNullableRelationMorphToId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Morphs whereNullableRelationMorphToType($value)
* @method static \Illuminate\Database\Eloquent\Builder|Morphs whereRelationMorphToId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Morphs whereRelationMorphToType($value)
* @mixin \Eloquent
*/
class Morphs extends Model
{
public function relationMorphTo(): MorphTo
{
return $this->morphTo();
}
public function nullableRelationMorphTo(): MorphTo
{
return $this->morphTo();
}
}
@@ -7,9 +7,9 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\PHPStormNoInspec
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\PHPStormNoInspection\Models\Simple
* *
* @property integer $id *
* @property int $id
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple query() * @method static \Illuminate\Database\Eloquent\Builder|Simple query()
@@ -7,9 +7,9 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\PHPStormNoInspec
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\PHPStormNoInspection\Models\Simple
* *
* @property integer $id *
* @property int $id
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple query() * @method static \Illuminate\Database\Eloquent\Builder|Simple query()
@@ -0,0 +1,18 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots\CustomPivot;
use Illuminate\Database\Eloquent\Model;
class ModelWithPivot extends Model
{
public function relationWithCustomPivot()
{
return $this->belongsToMany(ModelwithPivot::class)
->using(CustomPivot::class)
->as('customAccessor');
}
}
@@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots;
use Illuminate\Database\Eloquent\Relations\Pivot;
class CustomPivot extends Pivot
{
}
@@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
class Test extends AbstractModelsCommand
{
public function test(): void
{
$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,48 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots\CustomPivot;
use Illuminate\Database\Eloquent\Model;
/**
*
*
* @property-read CustomPivot $customAccessor
* @property-read \Illuminate\Database\Eloquent\Collection<int, ModelWithPivot> $relationWithCustomPivot
* @property-read int|null $relation_with_custom_pivot_count
* @method static \Illuminate\Database\Eloquent\Builder|ModelWithPivot newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ModelWithPivot newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ModelWithPivot query()
* @mixin \Eloquent
*/
class ModelWithPivot extends Model
{
public function relationWithCustomPivot()
{
return $this->belongsToMany(ModelwithPivot::class)
->using(CustomPivot::class)
->as('customAccessor');
}
}
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots;
use Illuminate\Database\Eloquent\Relations\Pivot;
/**
*
*
* @method static \Illuminate\Database\Eloquent\Builder|CustomPivot newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|CustomPivot newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|CustomPivot query()
* @mixin \Eloquent
*/
class CustomPivot extends Pivot
{
}
@@ -0,0 +1,13 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\QueryScopes\Models;
class Post extends PostParent
{
public function scopePublic($query)
{
return $query;
}
}
@@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\QueryScopes\Models;
use Illuminate\Database\Eloquent\Model;
class PostParent extends Model
{
public function scopeActive($query)
{
return $query;
}
}
@@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\QueryScopes;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
class Test extends AbstractModelsCommand
{
public function test(): void
{
$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,189 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\QueryScopes\Models;
/**
*
*
* @property int $id
* @property string|null $char_nullable
* @property string $char_not_nullable
* @property string|null $string_nullable
* @property string $string_not_nullable
* @property string|null $text_nullable
* @property string $text_not_nullable
* @property string|null $medium_text_nullable
* @property string $medium_text_not_nullable
* @property string|null $long_text_nullable
* @property string $long_text_not_nullable
* @property int|null $integer_nullable
* @property int $integer_not_nullable
* @property int|null $tiny_integer_nullable
* @property int $tiny_integer_not_nullable
* @property int|null $small_integer_nullable
* @property int $small_integer_not_nullable
* @property int|null $medium_integer_nullable
* @property int $medium_integer_not_nullable
* @property int|null $big_integer_nullable
* @property int $big_integer_not_nullable
* @property int|null $unsigned_integer_nullable
* @property int $unsigned_integer_not_nullable
* @property int|null $unsigned_tiny_integer_nullable
* @property int $unsigned_tiny_integer_not_nullable
* @property int|null $unsigned_small_integer_nullable
* @property int $unsigned_small_integer_not_nullable
* @property int|null $unsigned_medium_integer_nullable
* @property int $unsigned_medium_integer_not_nullable
* @property int|null $unsigned_big_integer_nullable
* @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable
* @property float $float_not_nullable
* @property float|null $double_nullable
* @property float $double_not_nullable
* @property string|null $decimal_nullable
* @property string $decimal_not_nullable
* @property int|null $boolean_nullable
* @property int $boolean_not_nullable
* @property string|null $enum_nullable
* @property string $enum_not_nullable
* @property string|null $json_nullable
* @property string $json_not_nullable
* @property string|null $jsonb_nullable
* @property string $jsonb_not_nullable
* @property string|null $date_nullable
* @property string $date_not_nullable
* @property string|null $datetime_nullable
* @property string $datetime_not_nullable
* @property string|null $datetimetz_nullable
* @property string $datetimetz_not_nullable
* @property string|null $time_nullable
* @property string $time_not_nullable
* @property string|null $timetz_nullable
* @property string $timetz_not_nullable
* @property string|null $timestamp_nullable
* @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable
* @property int|null $year_nullable
* @property int $year_not_nullable
* @property string|null $binary_nullable
* @property string $binary_not_nullable
* @property string|null $uuid_nullable
* @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable
* @property string $ipaddress_not_nullable
* @property string|null $macaddress_nullable
* @property string $macaddress_not_nullable
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|Post active()
* @method static \Illuminate\Database\Eloquent\Builder|Post newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Post newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Post public()
* @method static \Illuminate\Database\Eloquent\Builder|Post query()
* @method static \Illuminate\Database\Eloquent\Builder|Post whereBigIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereBigIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereBinaryNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereBinaryNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereBooleanNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereBooleanNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereCharNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereCharNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereDateNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereDateNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereDatetimeNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereDatetimeNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereDatetimetzNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereDatetimetzNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereDecimalNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereDecimalNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereDoubleNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereDoubleNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereEnumNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereEnumNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereFloatNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereFloatNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereIpaddressNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereIpaddressNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereJsonNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereJsonNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereJsonbNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereJsonbNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereLongTextNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereLongTextNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereMacaddressNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereMacaddressNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereMediumIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereMediumIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereMediumTextNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereMediumTextNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereSmallIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereSmallIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereStringNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereStringNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTextNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTextNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTimeNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTimeNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTimestampNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTimestampNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTimestamptzNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTimestamptzNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTimetzNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTimetzNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedSmallIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedSmallIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedTinyIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedTinyIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUuidNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUuidNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereYearNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereYearNullable($value)
* @mixin \Eloquent
*/
class Post extends PostParent
{
public function scopePublic($query)
{
return $query;
}
}
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\QueryScopes\Models;
use Illuminate\Database\Eloquent\Model;
/**
*
*
* @method static \Illuminate\Database\Eloquent\Builder|PostParent active()
* @method static \Illuminate\Database\Eloquent\Builder|PostParent newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|PostParent newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|PostParent query()
* @mixin \Eloquent
*/
class PostParent extends Model
{
public function scopeActive($query)
{
return $query;
}
}
@@ -8,9 +8,9 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\RelationCountProperties\Models\Post
* *
* @property integer $id *
* @property int $id
* @property string|null $char_nullable * @property string|null $char_nullable
* @property string $char_not_nullable * @property string $char_not_nullable
* @property string|null $string_nullable * @property string|null $string_nullable
@@ -21,36 +21,34 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
* @property string $medium_text_not_nullable * @property string $medium_text_not_nullable
* @property string|null $long_text_nullable * @property string|null $long_text_nullable
* @property string $long_text_not_nullable * @property string $long_text_not_nullable
* @property integer|null $integer_nullable * @property int|null $integer_nullable
* @property integer $integer_not_nullable * @property int $integer_not_nullable
* @property integer|null $tiny_integer_nullable * @property int|null $tiny_integer_nullable
* @property integer $tiny_integer_not_nullable * @property int $tiny_integer_not_nullable
* @property integer|null $small_integer_nullable * @property int|null $small_integer_nullable
* @property integer $small_integer_not_nullable * @property int $small_integer_not_nullable
* @property integer|null $medium_integer_nullable * @property int|null $medium_integer_nullable
* @property integer $medium_integer_not_nullable * @property int $medium_integer_not_nullable
* @property integer|null $big_integer_nullable * @property int|null $big_integer_nullable
* @property integer $big_integer_not_nullable * @property int $big_integer_not_nullable
* @property integer|null $unsigned_integer_nullable * @property int|null $unsigned_integer_nullable
* @property integer $unsigned_integer_not_nullable * @property int $unsigned_integer_not_nullable
* @property integer|null $unsigned_tiny_integer_nullable * @property int|null $unsigned_tiny_integer_nullable
* @property integer $unsigned_tiny_integer_not_nullable * @property int $unsigned_tiny_integer_not_nullable
* @property integer|null $unsigned_small_integer_nullable * @property int|null $unsigned_small_integer_nullable
* @property integer $unsigned_small_integer_not_nullable * @property int $unsigned_small_integer_not_nullable
* @property integer|null $unsigned_medium_integer_nullable * @property int|null $unsigned_medium_integer_nullable
* @property integer $unsigned_medium_integer_not_nullable * @property int $unsigned_medium_integer_not_nullable
* @property integer|null $unsigned_big_integer_nullable * @property int|null $unsigned_big_integer_nullable
* @property integer $unsigned_big_integer_not_nullable * @property int $unsigned_big_integer_not_nullable
* @property float|null $float_nullable * @property float|null $float_nullable
* @property float $float_not_nullable * @property float $float_not_nullable
* @property float|null $double_nullable * @property float|null $double_nullable
* @property float $double_not_nullable * @property float $double_not_nullable
* @property string|null $decimal_nullable * @property string|null $decimal_nullable
* @property string $decimal_not_nullable * @property string $decimal_not_nullable
* @property string|null $unsigned_decimal_nullable * @property int|null $boolean_nullable
* @property string $unsigned_decimal_not_nullable * @property int $boolean_not_nullable
* @property integer|null $boolean_nullable
* @property integer $boolean_not_nullable
* @property string|null $enum_nullable * @property string|null $enum_nullable
* @property string $enum_not_nullable * @property string $enum_not_nullable
* @property string|null $json_nullable * @property string|null $json_nullable
@@ -71,10 +69,10 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
* @property string $timestamp_not_nullable * @property string $timestamp_not_nullable
* @property string|null $timestamptz_nullable * @property string|null $timestamptz_nullable
* @property string $timestamptz_not_nullable * @property string $timestamptz_not_nullable
* @property integer|null $year_nullable * @property int|null $year_nullable
* @property integer $year_not_nullable * @property int $year_not_nullable
* @property mixed|null $binary_nullable * @property string|null $binary_nullable
* @property mixed $binary_not_nullable * @property string $binary_not_nullable
* @property string|null $uuid_nullable * @property string|null $uuid_nullable
* @property string $uuid_not_nullable * @property string $uuid_not_nullable
* @property string|null $ipaddress_nullable * @property string|null $ipaddress_nullable
@@ -145,8 +143,6 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
* @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereTinyIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedBigIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedDecimalNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNotNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedIntegerNullable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value) * @method static \Illuminate\Database\Eloquent\Builder|Post whereUnsignedMediumIntegerNotNullable($value)
@@ -0,0 +1,41 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class CompositeBelongsToVariation extends Model
{
public $table = 'belongs_to_variations';
public function bothNonNullableWithForeignKeyConstraint(): BelongsTo
{
// Note, duplicating the keys here for simplicity.
return $this->belongsTo(
self::class,
['not_null_column_with_foreign_key_constraint', 'not_null_column_with_foreign_key_constraint'],
['not_null_column_with_foreign_key_constraint', 'not_null_column_with_foreign_key_constraint'],
);
}
public function nonNullableMixedWithoutForeignKeyConstraint(): BelongsTo
{
return $this->belongsTo(
self::class,
['not_null_column_with_foreign_key_constraint', 'not_null_column_with_no_foreign_key_constraint'],
['not_null_column_with_foreign_key_constraint', 'not_null_column_with_no_foreign_key_constraint'],
);
}
public function nullableMixedWithForeignKeyConstraint(): BelongsTo
{
return $this->belongsTo(
self::class,
['nullable_column_with_no_foreign_key_constraint', 'not_null_column_with_foreign_key_constraint'],
['nullable_column_with_no_foreign_key_constraint', 'not_null_column_with_foreign_key_constraint'],
);
}
}
@@ -107,4 +107,9 @@ class Simple extends Model
{ {
return $this->testToAnyMorphedRelation(Simple::class); return $this->testToAnyMorphedRelation(Simple::class);
} }
public function relationSampleToBadlyNamedNotManyRelation()
{
return $this->testToBadlyNamedNotManyRelation(Simple::class);
}
} }
@@ -6,7 +6,9 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand; use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToAnyMorphedRelationType;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToAnyRelationType; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToAnyRelationType;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToBadlyNamedNotManyRelationType;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToManyRelationType; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToManyRelationType;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToOneRelationType; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToOneRelationType;
use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Config;
@@ -22,11 +24,13 @@ class Test extends AbstractModelsCommand
'testToManyRelation' => SampleToManyRelationType::class, 'testToManyRelation' => SampleToManyRelationType::class,
'testToAnyRelation' => SampleToAnyRelationType::class, 'testToAnyRelation' => SampleToAnyRelationType::class,
'testToAnyMorphedRelation' => SampleToAnyMorphedRelationType::class, 'testToAnyMorphedRelation' => SampleToAnyMorphedRelationType::class,
'testToBadlyNamedNotManyRelation' => SampleToBadlyNamedNotManyRelationType::class,
]); ]);
Config::set('ide-helper.additional_relation_return_types', [ Config::set('ide-helper.additional_relation_return_types', [
'testToAnyRelation' => 'many', 'testToAnyRelation' => 'many',
'testToAnyMorphedRelation' => 'morphTo', 'testToAnyMorphedRelation' => 'morphTo',
'testToBadlyNamedNotManyRelation' => 'one',
]); ]);
} }
@@ -6,6 +6,7 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Traits
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToAnyMorphedRelationType; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToAnyMorphedRelationType;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToAnyRelationType; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToAnyRelationType;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToBadlyNamedNotManyRelationType;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToManyRelationType; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToManyRelationType;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToOneRelationType; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToOneRelationType;
@@ -34,4 +35,10 @@ trait HasTestRelations
$instance = $this->newRelatedInstance($related); $instance = $this->newRelatedInstance($related);
return new SampleToAnyMorphedRelationType($instance->newQuery(), $this); return new SampleToAnyMorphedRelationType($instance->newQuery(), $this);
} }
public function testToBadlyNamedNotManyRelation($related)
{
$instance = $this->newRelatedInstance($related);
return new SampleToBadlyNamedNotManyRelationType($instance->newQuery(), $this);
}
} }
@@ -0,0 +1,52 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Concerns\SupportsDefaultModels;
use Illuminate\Database\Eloquent\Relations\Relation;
/**
* Sample for custom relation
*
* the relation is a big fake and only for testing of the docblock generation
*
* @package Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations
*/
class SampleToBadlyNamedNotManyRelationType extends Relation
{
use SupportsDefaultModels;
public function addConstraints()
{
// Fake
}
public function addEagerConstraints(array $models)
{
// Fake
}
public function initRelation(array $models, $relation)
{
// Fake
}
public function match(array $models, Collection $results, $relation)
{
// Fake
}
public function getResults()
{
// Fake
}
protected function newRelatedInstanceFor(Model $parent)
{
// Fake
}
}
@@ -8,13 +8,13 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Models\BelongsToVariation
* *
* @property integer $id *
* @property integer $not_null_column_with_foreign_key_constraint * @property int $id
* @property integer $not_null_column_with_no_foreign_key_constraint * @property int $not_null_column_with_foreign_key_constraint
* @property integer|null $nullable_column_with_foreign_key_constraint * @property int $not_null_column_with_no_foreign_key_constraint
* @property integer|null $nullable_column_with_no_foreign_key_constraint * @property int|null $nullable_column_with_foreign_key_constraint
* @property int|null $nullable_column_with_no_foreign_key_constraint
* @property-read BelongsToVariation $notNullColumnWithForeignKeyConstraint * @property-read BelongsToVariation $notNullColumnWithForeignKeyConstraint
* @property-read BelongsToVariation|null $notNullColumnWithNoForeignKeyConstraint * @property-read BelongsToVariation|null $notNullColumnWithNoForeignKeyConstraint
* @property-read BelongsToVariation|null $nullableColumnWithForeignKeyConstraint * @property-read BelongsToVariation|null $nullableColumnWithForeignKeyConstraint
@@ -57,6 +57,68 @@ declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Models; namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
/**
*
*
* @property int $id
* @property int $not_null_column_with_foreign_key_constraint
* @property int $not_null_column_with_no_foreign_key_constraint
* @property int|null $nullable_column_with_foreign_key_constraint
* @property int|null $nullable_column_with_no_foreign_key_constraint
* @property-read CompositeBelongsToVariation $bothNonNullableWithForeignKeyConstraint
* @property-read CompositeBelongsToVariation|null $nonNullableMixedWithoutForeignKeyConstraint
* @property-read CompositeBelongsToVariation|null $nullableMixedWithForeignKeyConstraint
* @method static \Illuminate\Database\Eloquent\Builder|CompositeBelongsToVariation newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|CompositeBelongsToVariation newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|CompositeBelongsToVariation query()
* @method static \Illuminate\Database\Eloquent\Builder|CompositeBelongsToVariation whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|CompositeBelongsToVariation whereNotNullColumnWithForeignKeyConstraint($value)
* @method static \Illuminate\Database\Eloquent\Builder|CompositeBelongsToVariation whereNotNullColumnWithNoForeignKeyConstraint($value)
* @method static \Illuminate\Database\Eloquent\Builder|CompositeBelongsToVariation whereNullableColumnWithForeignKeyConstraint($value)
* @method static \Illuminate\Database\Eloquent\Builder|CompositeBelongsToVariation whereNullableColumnWithNoForeignKeyConstraint($value)
* @mixin \Eloquent
*/
class CompositeBelongsToVariation extends Model
{
public $table = 'belongs_to_variations';
public function bothNonNullableWithForeignKeyConstraint(): BelongsTo
{
// Note, duplicating the keys here for simplicity.
return $this->belongsTo(
self::class,
['not_null_column_with_foreign_key_constraint', 'not_null_column_with_foreign_key_constraint'],
['not_null_column_with_foreign_key_constraint', 'not_null_column_with_foreign_key_constraint'],
);
}
public function nonNullableMixedWithoutForeignKeyConstraint(): BelongsTo
{
return $this->belongsTo(
self::class,
['not_null_column_with_foreign_key_constraint', 'not_null_column_with_no_foreign_key_constraint'],
['not_null_column_with_foreign_key_constraint', 'not_null_column_with_no_foreign_key_constraint'],
);
}
public function nullableMixedWithForeignKeyConstraint(): BelongsTo
{
return $this->belongsTo(
self::class,
['nullable_column_with_no_foreign_key_constraint', 'not_null_column_with_foreign_key_constraint'],
['nullable_column_with_no_foreign_key_constraint', 'not_null_column_with_foreign_key_constraint'],
);
}
}
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Models;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\ModelsOtherNamespace\AnotherModel; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\ModelsOtherNamespace\AnotherModel;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Traits\HasTestRelations; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Traits\HasTestRelations;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
@@ -70,9 +132,9 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Relations\MorphToMany; use Illuminate\Database\Eloquent\Relations\MorphToMany;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Models\Simple
* *
* @property integer $id *
* @property int $id
* @property-read Simple|null $relationBelongsTo * @property-read Simple|null $relationBelongsTo
* @property-read AnotherModel|null $relationBelongsToInAnotherNamespace * @property-read AnotherModel|null $relationBelongsToInAnotherNamespace
* @property-read \Illuminate\Database\Eloquent\Collection<int, Simple> $relationBelongsToMany * @property-read \Illuminate\Database\Eloquent\Collection<int, Simple> $relationBelongsToMany
@@ -97,6 +159,7 @@ use Illuminate\Database\Eloquent\Relations\MorphToMany;
* @property-read Model|\Eloquent $relationSampleToAnyMorphedRelationType * @property-read Model|\Eloquent $relationSampleToAnyMorphedRelationType
* @property-read \Illuminate\Database\Eloquent\Collection<int, Simple> $relationSampleToAnyRelationType * @property-read \Illuminate\Database\Eloquent\Collection<int, Simple> $relationSampleToAnyRelationType
* @property-read int|null $relation_sample_to_any_relation_type_count * @property-read int|null $relation_sample_to_any_relation_type_count
* @property-read Simple $relationSampleToBadlyNamedNotManyRelation
* @property-read Simple $relationSampleToManyRelationType * @property-read Simple $relationSampleToManyRelationType
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
@@ -195,4 +258,9 @@ class Simple extends Model
{ {
return $this->testToAnyMorphedRelation(Simple::class); return $this->testToAnyMorphedRelation(Simple::class);
} }
public function relationSampleToBadlyNamedNotManyRelation()
{
return $this->testToBadlyNamedNotManyRelation(Simple::class);
}
} }
@@ -35,18 +35,4 @@ class Test extends AbstractModelsCommand
$this->assertStringContainsString('Written new phpDocBlock to', $tester->getDisplay()); $this->assertStringContainsString('Written new phpDocBlock to', $tester->getDisplay());
$this->assertMatchesMockedSnapshot(); $this->assertMatchesMockedSnapshot();
} }
public function testSmartReset(): void
{
$command = $this->app->make(ModelsCommand::class);
$tester = $this->runCommand($command, [
'--write' => true,
'--smart-reset' => true,
]);
$this->assertSame(0, $tester->getStatusCode());
$this->assertStringContainsString('Written new phpDocBlock to', $tester->getDisplay());
$this->assertMatchesMockedSnapshot();
}
} }
@@ -10,7 +10,7 @@ use Illuminate\Database\Eloquent\Model;
* Text of existing phpdoc * Text of existing phpdoc
* *
* @property string $foo * @property string $foo
* @property integer $id * @property int $id
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple query() * @method static \Illuminate\Database\Eloquent\Builder|Simple query()
@@ -7,9 +7,9 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ResetAndSmartRes
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ResetAndSmartReset\Models\Simple * Text of existing phpdoc
* *
* @property integer $id * @property int $id
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple query() * @method static \Illuminate\Database\Eloquent\Builder|Simple query()
@@ -9,7 +9,7 @@ use Illuminate\Database\Eloquent\Model;
/** /**
* Text of existing phpdoc * Text of existing phpdoc
* *
* @property integer $id * @property int $id
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple query() * @method static \Illuminate\Database\Eloquent\Builder|Simple query()
@@ -22,6 +22,7 @@ class SimpleCast extends Model
'cast_to_array' => 'array', 'cast_to_array' => 'array',
'cast_to_json' => 'json', 'cast_to_json' => 'json',
'cast_to_collection' => 'collection', 'cast_to_collection' => 'collection',
'cast_to_enum_collection' => 'collection',
'cast_to_date' => 'date', 'cast_to_date' => 'date',
'cast_to_datetime' => 'datetime', 'cast_to_datetime' => 'datetime',
'cast_to_date_serialization' => 'date:Y-m-d', 'cast_to_date_serialization' => 'date:Y-m-d',
@@ -7,17 +7,17 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\SimpleCasts\Mode
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\SimpleCasts\Models\SimpleCast
* *
* @property integer $cast_to_int *
* @property integer $cast_to_integer * @property int $cast_to_int
* @property int $cast_to_integer
* @property float $cast_to_real * @property float $cast_to_real
* @property float $cast_to_float * @property float $cast_to_float
* @property float $cast_to_double * @property float $cast_to_double
* @property string $cast_to_decimal * @property string $cast_to_decimal
* @property string $cast_to_string * @property string $cast_to_string
* @property boolean $cast_to_bool * @property bool $cast_to_bool
* @property boolean $cast_to_boolean * @property bool $cast_to_boolean
* @property object $cast_to_object * @property object $cast_to_object
* @property array $cast_to_array * @property array $cast_to_array
* @property array $cast_to_json * @property array $cast_to_json
@@ -32,7 +32,7 @@ use Illuminate\Database\Eloquent\Model;
* @property \Carbon\CarbonImmutable $cast_to_immutable_custom_datetime * @property \Carbon\CarbonImmutable $cast_to_immutable_custom_datetime
* @property \Carbon\CarbonImmutable $cast_to_immutable_datetime * @property \Carbon\CarbonImmutable $cast_to_immutable_datetime
* @property \Carbon\CarbonImmutable $cast_to_immutable_datetime_serialization * @property \Carbon\CarbonImmutable $cast_to_immutable_datetime_serialization
* @property integer $cast_to_timestamp * @property int $cast_to_timestamp
* @property mixed $cast_to_encrypted * @property mixed $cast_to_encrypted
* @property array $cast_to_encrypted_array * @property array $cast_to_encrypted_array
* @property \Illuminate\Support\Collection $cast_to_encrypted_collection * @property \Illuminate\Support\Collection $cast_to_encrypted_collection
@@ -88,6 +88,7 @@ class SimpleCast extends Model
'cast_to_array' => 'array', 'cast_to_array' => 'array',
'cast_to_json' => 'json', 'cast_to_json' => 'json',
'cast_to_collection' => 'collection', 'cast_to_collection' => 'collection',
'cast_to_enum_collection' => 'collection',
'cast_to_date' => 'date', 'cast_to_date' => 'date',
'cast_to_datetime' => 'datetime', 'cast_to_datetime' => 'datetime',
'cast_to_date_serialization' => 'date:Y-m-d', 'cast_to_date_serialization' => 'date:Y-m-d',
@@ -8,9 +8,9 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\SoftDeletes\Models\Simple
* *
* @property integer $id *
* @property int $id
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Simple onlyTrashed()
@@ -9,7 +9,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\Builder;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\UnionTypes\Models\UnionTypeModel *
* *
* @property-read string|int|null $foo * @property-read string|int|null $foo
* @property-read \Illuminate\Database\Eloquent\Collection<int, UnionTypeModel> $withUnionTypeReturn * @property-read \Illuminate\Database\Eloquent\Collection<int, UnionTypeModel> $withUnionTypeReturn
@@ -8,9 +8,9 @@ use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Variadic\Models\Simple
* *
* @property integer $id *
* @property int $id
* @method static Builder|Simple newModelQuery() * @method static Builder|Simple newModelQuery()
* @method static Builder|Simple newQuery() * @method static Builder|Simple newQuery()
* @method static Builder|Simple query() * @method static Builder|Simple query()
@@ -0,0 +1,31 @@
<?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_enum_collection');
$table->string('cast_to_as_array_object');
});
}
}
@@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class BackedAttributeTable extends Migration
{
public function up(): void
{
Schema::create('backed_attributes', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('name_read');
$table->string('name_write');
});
}
}
@@ -0,0 +1,18 @@
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class MorphsTable extends Migration
{
public function up(): void
{
Schema::create('morphs', function (Blueprint $table) {
$table->morphs('relation_morph_to');
$table->nullableMorphs('nullable_relation_morph_to');
});
}
}
@@ -67,9 +67,6 @@ class PostsTable extends Migration
$table->decimal('decimal_nullable')->nullable(); $table->decimal('decimal_nullable')->nullable();
$table->decimal('decimal_not_nullable'); $table->decimal('decimal_not_nullable');
$table->unsignedDecimal('unsigned_decimal_nullable')->nullable();
$table->unsignedDecimal('unsigned_decimal_not_nullable');
$table->boolean('boolean_nullable')->nullable(); $table->boolean('boolean_nullable')->nullable();
$table->boolean('boolean_not_nullable'); $table->boolean('boolean_not_nullable');