Mercurial > packages > magicforger
diff src/Replacer/TableReplacer.php @ 39:b5c6ebd33547 ls_dev_2025_09
Improving the factories, tests, and requests
| author | Luka Sitas <sitas.luka.97@gmail.com> |
|---|---|
| date | Thu, 25 Sep 2025 23:16:13 -0400 |
| parents | 8dd668020310 |
| children | 2cf26b593f4a |
line wrap: on
line diff
--- a/src/Replacer/TableReplacer.php Thu Sep 25 20:24:13 2025 -0400 +++ b/src/Replacer/TableReplacer.php Thu Sep 25 23:16:13 2025 -0400 @@ -51,15 +51,15 @@ if (in_array($column['name'], $this->columns_to_ignore)) { continue; } - $type = $column['type_name']; - //date - if(in_array($type, ['date'])) { - $insert .= sprintf("'%s' => 'date:Y-m-d',", $column['name'])."\n"; - } - //time - if(in_array($type, ['timestamp'])) { - $insert .= sprintf("'%s' => 'date:Y-m-d H:i',", $column['name'])."\n"; - } + $type = $column['type_name']; + // date + if (in_array($type, ['date'])) { + $insert .= sprintf("'%s' => 'date:Y-m-d',", $column['name'])."\n"; + } + // time + if (in_array($type, ['timestamp'])) { + $insert .= sprintf("'%s' => 'date:Y-m-d H:i',", $column['name'])."\n"; + } } return $insert; @@ -104,10 +104,81 @@ { $insert = ''; foreach ($this->get_columns() as $column) { + // Don't do validation on some of the basic columns if (in_array($column['name'], $this->columns_to_ignore)) { continue; } - $insert .= sprintf("'%s' => 'nullable',", $column['name'])."\n"; + + $options = []; + + // Add default value checks if needed + if (is_null($column['default']) && ! $column['nullable']) { + $options[] = "'required'"; + } + else { + $options[] = "'nullable'"; + } + + // Determine the validations based on column type + $type = strtolower($column['type_name']); + $size = (preg_match('/\((\d+)\)/', $column['type'], $matches)) ? $matches[1] : null; + + switch ($type) { + case 'varchar': + case 'char': + $options[] = "'string'"; + + // Extract length if defined + if (! is_null($size)) { + $options[] = "'max:$size'"; + } + break; + + case 'text': + $options[] = "'string'"; + break; + + case 'int': + case 'tinyint': + case 'smallint': + case 'mediumint': + case 'bigint': + $options[] = "'integer'"; + if (strpos($column['type'], 'unsigned') !== false) { + $options[] = "'min:0'"; + } + if (! is_null($size)) { + $options[] = "'max_digits:".$size."'"; + } + break; + + case 'decimal': + case 'double': + case 'float': + $options[] = "'numeric'"; + // Extract precision and scale if defined + if (preg_match('/\((\d+),(\d+)\)/', $column['type'], $matches)) { + $precision = $matches[1]; + $scale = isset($matches[2]) ? ','.$matches[2] : ''; + + $options[] = "'decimal:$precision$scale'"; + } + break; + + case 'boolean': + $options[] = "'boolean'"; + break; + + case 'date': + case 'datetime': + case 'timestamp': + $options[] = "'date'"; + break; + + // Add other types as needed + } + + $insert .= sprintf("'%s' => [%s],\n", $column['name'], implode(',', $options)); } return $insert;
