Mercurial > packages > magicforger
diff src/Replacer/TableReplacer.php @ 45:c7fd31303024 default tip
merging down to default
| author | Luka Sitas <sitas.luka.97@gmail.com> |
|---|---|
| date | Thu, 12 Nov 2026 21:19:53 -0500 |
| parents | 2cf26b593f4a |
| children |
line wrap: on
line diff
--- a/src/Replacer/TableReplacer.php Wed Sep 10 21:00:47 2025 -0400 +++ b/src/Replacer/TableReplacer.php Thu Nov 12 21:19:53 2026 -0500 @@ -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;
