Skip to content

Incorrect faker provider generated from column defined as "name: enum" #691

Closed
@runofthemill

Description

@runofthemill
  • Laravel Version: 11.1.1
  • PHP Version: 8.3.7
  • Blueprint Version: 2.10.0
  • Platform: Mac

Issue:

It's possible this is intended behavior, but feels more like a bug?

If I define a model with a column name of name and a type enum

models:
  Post:
    name: enum:one,two,three

I would expect the generated factory definition to look like this

return [
  'name' => $this->faker->randomElement(["one","two","three"]),
];

but instead I get

return [
  'name' => $this->faker->name(),
];

Looks like the FactoryGenerator looks for an implicit match before an explicit one:

$faker = FakerRegistry::fakerData($column->name()) ?? FakerRegistry::fakerDataType($column->dataType());

Repro:

composer create-project laravel/laravel example-app
cd example-app
composer require -W --dev laravel-shift/blueprint
php artisan blueprint:new
# fill in draft.yaml as above
php artisan blueprint:build

As a workaround I can easily change the name of the column, but as-is the generated migration ends up with $table->enum('name', ["one","two","three"]);, so if nothing else, the logic seems to differ a bit between the Factory and Migration generators ¯\_(ツ)_/¯

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions