From db53e8e2b5868fb05019ae20e727be24831b46d8 Mon Sep 17 00:00:00 2001 From: Kaloqn <32775332+KaloyanYosifov@users.noreply.github.com> Date: Fri, 4 Dec 2020 08:36:08 +0200 Subject: [PATCH] Add support for dedicated eloquent builders and type/doc parameter support. (#1089) * Add support for generating helpers for external eloquent builders * Extract external builder methods generator to its own method and add an option to toggle this feature * Check if we are using the default name of the eloquent builder * Add tests with snapshots for external eloquent builder feature * Refactor codegs * Allow for type hinting * Update test * Run cs fix * Update readme * Use getName for parameter instead of relying on __toString() * Do not use str_contains and use built in php method --- README.md | 7 + config/ide-helper.php | 11 ++ src/Console/ModelsCommand.php | 112 ++++++++++- .../Builders/PostExternalQueryBuilder.php | 20 ++ .../Models/Post.php | 16 ++ .../Test.php | 31 ++++ .../__snapshots__/Test__test__1.php | 169 +++++++++++++++++ .../Builders/PostExternalQueryBuilder.php | 52 ++++++ .../Models/Post.php | 16 ++ .../Test.php | 24 +++ .../__snapshots__/Test__test__1.php | 175 ++++++++++++++++++ 11 files changed, 631 insertions(+), 2 deletions(-) create mode 100644 tests/Console/ModelsCommand/DoesNotGeneratePhpdocWithExternalEloquentBuilder/Builders/PostExternalQueryBuilder.php create mode 100644 tests/Console/ModelsCommand/DoesNotGeneratePhpdocWithExternalEloquentBuilder/Models/Post.php create mode 100644 tests/Console/ModelsCommand/DoesNotGeneratePhpdocWithExternalEloquentBuilder/Test.php create mode 100644 tests/Console/ModelsCommand/DoesNotGeneratePhpdocWithExternalEloquentBuilder/__snapshots__/Test__test__1.php create mode 100644 tests/Console/ModelsCommand/GeneratePhpdocWithExternalEloquentBuilder/Builders/PostExternalQueryBuilder.php create mode 100644 tests/Console/ModelsCommand/GeneratePhpdocWithExternalEloquentBuilder/Models/Post.php create mode 100644 tests/Console/ModelsCommand/GeneratePhpdocWithExternalEloquentBuilder/Test.php create mode 100644 tests/Console/ModelsCommand/GeneratePhpdocWithExternalEloquentBuilder/__snapshots__/Test__test__1.php diff --git a/README.md b/README.md index c7c78f9..9938b05 100644 --- a/README.md +++ b/README.md @@ -216,6 +216,13 @@ You may use the [`::withCount`](https://laravel.com/docs/master/eloquent-relatio By default, these attributes are generated in the phpdoc. You can turn them off by setting the config `write_model_relation_count_properties` to `false`. +#### Dedicated Eloquent Builder methods + +A new method to the eloquent models was added called `newEloquentBuilder` [Reference](https://timacdonald.me/dedicated-eloquent-model-query-builders/) where we can +add support for creating a new dedicated class instead of using local scopes in the model itself. + +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`). diff --git a/config/ide-helper.php b/config/ide-helper.php index 94118a6..becf1b1 100644 --- a/config/ide-helper.php +++ b/config/ide-helper.php @@ -62,6 +62,17 @@ return [ 'write_model_magic_where' => true, + /* + |-------------------------------------------------------------------------- + | Write Model External Eloquent Builder methods + |-------------------------------------------------------------------------- + | + | Set to false to disable write external eloquent builder methods + | + */ + + 'write_model_external_builder_methods' => true, + /* |-------------------------------------------------------------------------- | Write Model relation count properties diff --git a/src/Console/ModelsCommand.php b/src/Console/ModelsCommand.php index 4dc2215..1fed401 100644 --- a/src/Console/ModelsCommand.php +++ b/src/Console/ModelsCommand.php @@ -91,6 +91,7 @@ class ModelsCommand extends Command protected $reset; protected $keep_text; protected $phpstorm_noinspections; + protected $write_model_external_builder_methods; /** * @var bool[string] */ @@ -135,6 +136,7 @@ class ModelsCommand extends Command $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_external_builder_methods = $this->laravel['config']->get('ide-helper.write_model_external_builder_methods', true); $this->write_model_relation_count_properties = $this->laravel['config']->get('ide-helper.write_model_relation_count_properties', true); @@ -543,7 +545,7 @@ class ModelsCommand extends Command array_shift($args); $builder = $this->getClassNameInDestinationFile( $reflection->getDeclaringClass(), - \Illuminate\Database\Eloquent\Builder::class + get_class($model->newModelQuery()) ); $modelName = $this->getClassNameInDestinationFile( $reflection->getDeclaringClass(), @@ -558,6 +560,10 @@ class ModelsCommand extends Command $method, $builder . '|' . $this->getClassNameInDestinationFile($model, get_class($model)) ); + + if ($this->write_model_external_builder_methods) { + $this->writeModelExternalBuilderMethods($builder, $model); + } } elseif ( !method_exists('Illuminate\Database\Eloquent\Model', $method) && !Str::startsWith($method, 'get') @@ -887,9 +893,11 @@ class ModelsCommand extends Command * Get the parameters and format them correctly * * @param $method + * @param bool $withTypeHint * @return array + * @throws \ReflectionException */ - public function getParameters($method) + public function getParameters($method, bool $withTypeHint = false) { //Loop through the default values for parameters, and make the correct output string $paramsWithDefault = []; @@ -920,8 +928,14 @@ class ModelsCommand extends Command } else { $default = "'" . trim($default) . "'"; } + $paramStr .= " = $default"; } + + if ($withTypeHint && $paramType = $this->getParamType($method, $param)) { + $paramStr = $paramType . ' ' . $paramStr; + } + $paramsWithDefault[] = $paramStr; } return $paramsWithDefault; @@ -1146,4 +1160,98 @@ class ModelsCommand extends Command return $namespaceAliases; } + + protected function writeModelExternalBuilderMethods(string $builder, Model $model): void + { + if (in_array($builder, ['\Illuminate\Database\Eloquent\Builder', 'EloquentBuilder'])) { + return; + } + + $newBuilderMethods = get_class_methods($builder); + $originalBuilderMethods = get_class_methods('\Illuminate\Database\Eloquent\Builder'); + + // diff the methods between the new builder and original one + // and create helpers for the ones that are new + $newMethodsFromNewBuilder = array_diff($newBuilderMethods, $originalBuilderMethods); + + foreach ($newMethodsFromNewBuilder as $builderMethod) { + $reflection = new \ReflectionMethod($builder, $builderMethod); + $args = $this->getParameters($reflection, true); + + $this->setMethod( + $builderMethod, + $builder . '|' . $this->getClassNameInDestinationFile($model, get_class($model)), + $args + ); + } + } + + protected function getParamType(\ReflectionMethod $method, \ReflectionParameter $parameter): ?string + { + if ($paramType = $parameter->getType()) { + if ($paramType->allowsNull()) { + return '?' . $paramType->getName(); + } + + return $paramType->getName(); + } + + $docComment = $method->getDocComment(); + + if (!$docComment) { + return null; + } + + preg_match( + '/@param ((?:(?:[\w?|\\\\<>])+(?:\[])?)+)/', + $docComment ?? '', + $matches + ); + $type = $matches[1] ?? null; + + if (strpos($type, '|') !== false) { + $types = explode('|', $type); + + // if we have more than 2 types + // we return null as we cannot use unions in php yet + if (count($types) > 2) { + return null; + } + + $hasNull = false; + + foreach ($types as $currentType) { + if ($currentType === 'null') { + $hasNull = true; + continue; + } + + // if we didn't find null assign the current type to the type we want + $type = $currentType; + } + + // if we haven't found null type set + // we return null as we cannot use unions with different types yet + if (!$hasNull) { + return null; + } + + $type = '?' . $type; + } + + $typesThatAreNotAllowed = [ + 'null', + 'mixed', + 'nullable', + ]; + + // we replace the ? with an empty string so we can check the actual type + if (in_array(str_replace('?', '', $type), $typesThatAreNotAllowed)) { + return null; + } + + // if we have a match on index 1 + // then we have found the type of the variable if not we return null + return $type; + } } diff --git a/tests/Console/ModelsCommand/DoesNotGeneratePhpdocWithExternalEloquentBuilder/Builders/PostExternalQueryBuilder.php b/tests/Console/ModelsCommand/DoesNotGeneratePhpdocWithExternalEloquentBuilder/Builders/PostExternalQueryBuilder.php new file mode 100644 index 0000000..3578b85 --- /dev/null +++ b/tests/Console/ModelsCommand/DoesNotGeneratePhpdocWithExternalEloquentBuilder/Builders/PostExternalQueryBuilder.php @@ -0,0 +1,20 @@ +set('ide-helper.write_model_external_builder_methods', false); + } + + public function test(): void + { + $command = $this->app->make(ModelsCommand::class); + + $tester = $this->runCommand($command, [ + '--nowrite' => true, + ]); + + $this->assertSame(0, $tester->getStatusCode()); + $this->assertStringContainsString('Model information was written to _ide_helper_models.php', $tester->getDisplay()); + $this->assertMatchesMockedSnapshot(); + } +} diff --git a/tests/Console/ModelsCommand/DoesNotGeneratePhpdocWithExternalEloquentBuilder/__snapshots__/Test__test__1.php b/tests/Console/ModelsCommand/DoesNotGeneratePhpdocWithExternalEloquentBuilder/__snapshots__/Test__test__1.php new file mode 100644 index 0000000..c6a86ad --- /dev/null +++ b/tests/Console/ModelsCommand/DoesNotGeneratePhpdocWithExternalEloquentBuilder/__snapshots__/Test__test__1.php @@ -0,0 +1,169 @@ + + */ + + +namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\DoesNotGeneratePhpdocWithExternalEloquentBuilder\Models{ +/** + * Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\DoesNotGeneratePhpdocWithExternalEloquentBuilder\Models\Post + * + * @property integer $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 integer|null $integer_nullable + * @property integer $integer_not_nullable + * @property integer|null $tiny_integer_nullable + * @property integer $tiny_integer_not_nullable + * @property integer|null $small_integer_nullable + * @property integer $small_integer_not_nullable + * @property integer|null $medium_integer_nullable + * @property integer $medium_integer_not_nullable + * @property integer|null $big_integer_nullable + * @property integer $big_integer_not_nullable + * @property integer|null $unsigned_integer_nullable + * @property integer $unsigned_integer_not_nullable + * @property integer|null $unsigned_tiny_integer_nullable + * @property integer $unsigned_tiny_integer_not_nullable + * @property integer|null $unsigned_small_integer_nullable + * @property integer $unsigned_small_integer_not_nullable + * @property integer|null $unsigned_medium_integer_nullable + * @property integer $unsigned_medium_integer_not_nullable + * @property integer|null $unsigned_big_integer_nullable + * @property integer $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 string|null $unsigned_decimal_nullable + * @property string $unsigned_decimal_not_nullable + * @property integer|null $boolean_nullable + * @property integer $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 integer|null $year_nullable + * @property integer $year_not_nullable + * @property mixed|null $binary_nullable + * @property mixed $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 \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\DoesNotGeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post newModelQuery() + * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\DoesNotGeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post newQuery() + * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\DoesNotGeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|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 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 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) + */ + class Post extends \Eloquent {} +} + diff --git a/tests/Console/ModelsCommand/GeneratePhpdocWithExternalEloquentBuilder/Builders/PostExternalQueryBuilder.php b/tests/Console/ModelsCommand/GeneratePhpdocWithExternalEloquentBuilder/Builders/PostExternalQueryBuilder.php new file mode 100644 index 0000000..cab251f --- /dev/null +++ b/tests/Console/ModelsCommand/GeneratePhpdocWithExternalEloquentBuilder/Builders/PostExternalQueryBuilder.php @@ -0,0 +1,52 @@ +app->make(ModelsCommand::class); + + $tester = $this->runCommand($command, [ + '--nowrite' => true, + ]); + + $this->assertSame(0, $tester->getStatusCode()); + $this->assertStringContainsString('Model information was written to _ide_helper_models.php', $tester->getDisplay()); + $this->assertMatchesMockedSnapshot(); + } +} diff --git a/tests/Console/ModelsCommand/GeneratePhpdocWithExternalEloquentBuilder/__snapshots__/Test__test__1.php b/tests/Console/ModelsCommand/GeneratePhpdocWithExternalEloquentBuilder/__snapshots__/Test__test__1.php new file mode 100644 index 0000000..4ba3bcf --- /dev/null +++ b/tests/Console/ModelsCommand/GeneratePhpdocWithExternalEloquentBuilder/__snapshots__/Test__test__1.php @@ -0,0 +1,175 @@ + + */ + + +namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Models{ +/** + * Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Models\Post + * + * @property integer $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 integer|null $integer_nullable + * @property integer $integer_not_nullable + * @property integer|null $tiny_integer_nullable + * @property integer $tiny_integer_not_nullable + * @property integer|null $small_integer_nullable + * @property integer $small_integer_not_nullable + * @property integer|null $medium_integer_nullable + * @property integer $medium_integer_not_nullable + * @property integer|null $big_integer_nullable + * @property integer $big_integer_not_nullable + * @property integer|null $unsigned_integer_nullable + * @property integer $unsigned_integer_not_nullable + * @property integer|null $unsigned_tiny_integer_nullable + * @property integer $unsigned_tiny_integer_not_nullable + * @property integer|null $unsigned_small_integer_nullable + * @property integer $unsigned_small_integer_not_nullable + * @property integer|null $unsigned_medium_integer_nullable + * @property integer $unsigned_medium_integer_not_nullable + * @property integer|null $unsigned_big_integer_nullable + * @property integer $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 string|null $unsigned_decimal_nullable + * @property string $unsigned_decimal_not_nullable + * @property integer|null $boolean_nullable + * @property integer $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 integer|null $year_nullable + * @property integer $year_not_nullable + * @property mixed|null $binary_nullable + * @property mixed $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 \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post isActive() + * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post isLoadingWith(?string $with) + * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post isStatus(string $status) + * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post newModelQuery() + * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post newQuery() + * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|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 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 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) + * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post withMixedOption($option) + * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post withSomeone($someone) + * @method static \Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\GeneratePhpdocWithExternalEloquentBuilder\Builders\PostExternalQueryBuilder|Post withTheNumber(?int $number) + */ + class Post extends \Eloquent {} +} +