From 6ebb91f077ad94fd5f79ccb785a914d0a65a7d32 Mon Sep 17 00:00:00 2001 From: Pinga <121483313+getpinga@users.noreply.github.com> Date: Tue, 5 Sep 2023 01:12:44 +0300 Subject: [PATCH] Improved model creation --- cp/bin/createModel.php | 71 +++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/cp/bin/createModel.php b/cp/bin/createModel.php index 850021b..a822384 100644 --- a/cp/bin/createModel.php +++ b/cp/bin/createModel.php @@ -1,6 +1,6 @@ select('DESCRIBE ' . $tableName); @@ -17,11 +18,30 @@ $columnData = $db->select('DESCRIBE ' . $tableName); // Create the class name based on the table name (e.g. "users" -> "User") $className = ucwords($tableName, '_'); +// Generate the necessary lists outside of the heredoc +$columnFieldsList = implode(', ', array_map(function ($column) { + return $column['Field']; +}, $columnData)); + +$columnValuesList = implode(', ', array_map(function ($column) { + return '$' . $column['Field']; +}, $columnData)); + +$quotedColumnValuesList = implode(', ', array_map(function ($column) { + return '$' . $column['Field'] . ' = $this->db->quote($' . $column['Field'] . ');'; +}, $columnData)); + +$setColumnsList = implode(', ', array_map(function ($column) { + return $column['Field'] . ' = $' . $column['Field']; +}, $columnData)); + // Generate the PHP code for the CRUD model based on the column data $modelCode = <<db = \$db; } - public function getAll$className() + public function getAll{$className}() { return \$this->db->select('SELECT * FROM $tableName'); } - public function get$classNameById(\$id) + public function get{$className}ById(\$id) { return \$this->db->select('SELECT * FROM $tableName WHERE id = ?', [\$id])->fetch(); } - public function create$className(${ - implode(', ', array_map(function ($column) { - return '$' . $column['Field']; - }, $columnData)) - }) + public function create{$className}($columnValuesList) { - ${implode("\n ", array_map(function ($column) { - return '$' . $column['Field'] . ' = $this->db->quote($' . $column['Field'] . ');'; - }, $columnData))} - - \$this->db->insert('INSERT INTO $tableName (${implode(', ', array_map(function ($column) { - return $column['Field']; - }, $columnData))}) VALUES (${implode(', ', array_map(function ($column) { - return '$' . $column['Field']; - }, $columnData))})'); + $quotedColumnValuesList + \$this->db->insert('INSERT INTO $tableName ($columnFieldsList) VALUES ($columnValuesList)'); + return \$this->db->lastInsertId(); } - public function update$className(\$id${implode(', ', array_map(function ($column) { - return ', $' . $column['Field']; - }, $columnData))}) + public function update{$className}(\$id, $columnValuesList) { - ${implode("\n ", array_map(function ($column) { - return '$' . $column['Field'] . ' = $this->db->quote($' . $column['Field'] . ');'; - }, $columnData))} - - \$this->db->update('UPDATE $tableName SET ${implode(', ', array_map(function ($column) { - return $column['Field'] . ' = $' . $column['Field']; - }, $columnData))} WHERE id = ?', array_merge([\$id], array_map(function ($column) { - return '$' . $column['Field']; - }, $columnData))); + $quotedColumnValuesList + \$this->db->update('UPDATE $tableName SET $setColumnsList WHERE id = ?', [\$id]); + return true; } - public function delete$className(\$id) + public function delete{$className}(\$id) { \$this->db->delete('DELETE FROM $tableName WHERE id = ?', [\$id]); - return true; } } PHP; // Save the generated PHP code to a file -file_put_contents(__DIR__ . "/app/Models/$className.php", $modelCode); +file_put_contents(__DIR__ . "/../app/Models/$className.php", $modelCode); // Output a success message -echo "CRUD model for table '$tableName' generated successfully.\n"; +echo "CRUD model for table '$tableName' generated successfully.\n"; \ No newline at end of file