When defining attributes, you can use several types of generators:
1. Callables/Closures
Use a closure to generate values dynamically. The closure receives the model instance and a boolean indicating if it is being saved.
$fm->define('MyModel')->setDefinitions([
'slug' => function ($object, $saved) {
return strtolower(trim(preg_replace("/[^a-zA-Z0-9\/|_|+ -]/", '', $object->title), '-'));
},
]);
You can also use a string representing a static method: 'MyModel::exampleMethod'.
2. Faker Facade
Use League\FactoryMuffin\Faker\Facade to generate realistic data.
- Standard:
Faker::word(), Faker::email(), Faker::firstNameMale(), etc. - Unique:
Faker::unique()->firstNameFemale() ensures the value is unique across generated models. - Optional:
Faker::optional()->imageUrl(400, 400) may return null instead of a value. - Ranges:
Faker::numberBetween(20, 40).
3. Factory Generator (Relationships)
To set up relationships, use the factory|ModelName syntax. This returns the ID of the newly generated related model.
$fm->define('Foo')->addDefinition('bar_id', 'factory|Bar');
use League\FactoryMuffin\Faker\Facade as Faker;
$fm->define('MyModel')->setDefinitions([
'title' => Faker::sentence(5),
'slug' => function ($object, $saved) {
return strtolower(trim(preg_replace("/[^a-zA-Z0-9\/|_|+ -]/", '', $object->title), '-'));
},
'email' => Faker::email(),
'age' => Faker::numberBetween(20, 40),
'name' => Faker::unique()->firstNameFemale(),
'pic' => Faker::optional()->imageUrl(400, 400),
]);
// Relationship example
$fm->define('Foo')->addDefinition('bar_id', 'factory|Bar');