21 private string $defaultRootFolder;
29 $this->defaultRootFolder = $defaultRootFolder ?? (string)
$_SERVER[
'DOCUMENT_ROOT'];
34 $namespace = $this->generateNamespace($dto);
35 $className = $this->generateClassName($dto->tableName);
40 $this->getFieldsTempaltes($dto->tableName),
43 return $fileTemplate->getContent();
48 $namespace = $this->generateNamespace($dto);
49 $className = $this->generateClassName($dto->tableName);
54 $this->getFieldsTempaltes($dto->tableName),
59 $dto->rootFolder ?: $this->defaultRootFolder,
63 $this->renderer->renderToFile($filePath, $fileTemplate);
68 private function generateNamespace(
GenerateDto $dto): string
70 $namespace = $dto->namespace;
71 if (empty($namespace))
76 throw new InvalidArgumentException(
'If namespace option is not set, module argument MUST BE set!');
79 $namespace = $this->NamespaceGenerator->generateNamespaceForModule(
$moduleId,
'Tablet');
85 private function generateClassName(
string $name): string
90 throw new InvalidArgumentException(
'Invalid table name');
93 $parts = explode(
'_',
$name);
95 static fn(
$i) => ucfirst(
$i),
99 return join(
'', $parts) .
'Table';
108 private function getFieldsTempaltes(
string $tableName, ?
string $connectionName =
null):
array
113 $resultTemplates = [];
115 [,$columns] = $builder->getTableFields($tableName);
116 $uniqueIndexes = $builder->getUniqueIndexes($tableName);
117 foreach ($columns as $columnName => $columnInfo)
119 $resultTemplates[$columnName] = $this->createFieldTemplate($columnName, $columnInfo, $uniqueIndexes);
123 return $resultTemplates;
126 private function createFieldTemplate(
string $columnName,
array $columnInfo,
array $uniqueIndexes): FieldTemplate
128 $typeOrm = $columnInfo[
'orm_type'];
129 $length = $columnInfo[
'length'];
130 $nullable = $columnInfo[
'nullable'];
131 $default = $columnInfo[
'default'];
132 $increment = $columnInfo[
'increment'];
136 if ($typeOrm ===
'integer')
138 if (str_starts_with($columnInfo[
'type~'],
'tinyint'))
142 elseif (str_starts_with($columnInfo[
'type~'],
'smallint'))
146 elseif (str_starts_with($columnInfo[
'type~'],
'mediumint'))
150 elseif (str_starts_with($columnInfo[
'type~'],
'bigint'))
161 foreach ($uniqueIndexes as $indexName => $columnNames)
163 if (in_array($columnName, $columnNames))
170 return new FieldTemplate(
static getConnection($name="")
generateContent(GenerateDto $dto)
generateFile(GenerateDto $dto)
__construct(string $defaultRootFolder=null)
generatePathToClass(string $namespace, string $className)
static requireModule($moduleName)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)