Skip to content

Commit fed9260

Browse files
authored
Allow to generate correct values for decimal type (#31)
2 parents 4281cc0 + 9b5a221 commit fed9260

1 file changed

Lines changed: 15 additions & 3 deletions

File tree

src/Console/GenerateFactoryCommand.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ protected function getPropertiesFromTable(Model $model): void
206206
$type = $column['type_name'];
207207

208208
if ($this->isFieldFakeable($field, $model)) {
209-
$this->setProperty($model, $field, $type, $nullable);
209+
$this->setProperty($model, $field, $type, $column, $nullable);
210210
}
211211
}
212212
}
@@ -254,8 +254,21 @@ protected function getPropertiesFromMethods(Model $model): void
254254
}
255255
}
256256

257-
protected function setProperty(Model $model, string $field, string $type, bool $nullable = false): void
257+
protected function setProperty(Model $model, string $field, string $type, array $column, bool $nullable = false): void
258258
{
259+
if ($type === 'decimal') {
260+
$pattern = '/decimal\((?P<integer_digits>\d+),(?P<decimal_digits>\d+)\)/';
261+
if (preg_match($pattern, $column['type'], $matches)) {
262+
$integerDigits = $matches['integer_digits'];
263+
$decimalDigits = $matches['decimal_digits'];
264+
}
265+
266+
$maxNumber = pow(10, $integerDigits - $decimalDigits) - 1;
267+
$this->properties[$field] = $this->fakerPrefix("randomFloat($decimalDigits, 0, $maxNumber)", $nullable);
268+
269+
return;
270+
}
271+
259272
if ($enumValues = EnumValues::get($model, $field)) {
260273
$enumValues = implode("', '", $enumValues);
261274

@@ -405,7 +418,6 @@ protected function mapByType(string $field, bool $nullable = false): ?string
405418
'bigint' => $this->fakerPrefix('randomNumber()', $nullable),
406419
'smallint' => $this->fakerPrefix('randomNumber()', $nullable),
407420
'tinyint' => $this->fakerPrefix('randomNumber(1)', $nullable),
408-
'decimal' => $this->fakerPrefix('randomFloat()', $nullable),
409421
'float' => $this->fakerPrefix('randomFloat()', $nullable),
410422
'boolean' => $this->fakerPrefix('boolean', $nullable),
411423
];

0 commit comments

Comments
 (0)