refactor: database class singleton to use existing connection (#32)

This is a half-way fix for #31 so it does not close it. But it does solve the issue of `Too many connections` if the `Database` class when the `Database` class is instanced a lot. The issue of credentials still remain.

Reviewed-on: https://codeberg.org/vlw/scaffold/pulls/32
This commit is contained in:
Victor Westerlund 2026-02-24 10:44:05 +01:00
parent 71a9f12b02
commit ffd809f76d
2 changed files with 17 additions and 3 deletions

View file

@ -19,6 +19,8 @@
private const DEFAULT_USERNAME = "www-data"; private const DEFAULT_USERNAME = "www-data";
private const DEFAULT_PASSWORD = ""; private const DEFAULT_PASSWORD = "";
private static ?Database $instance = null;
/** /**
* Create a new Database instance from credentials * Create a new Database instance from credentials
* *
@ -44,6 +46,16 @@
$_ENV["mariadb"]["user"] = $username; $_ENV["mariadb"]["user"] = $username;
$_ENV["mariadb"]["pass"] = $password; $_ENV["mariadb"]["pass"] = $password;
$_ENV["mariadb"]["db"] = $database; $_ENV["mariadb"]["db"] = $database;
self::$instance = null;
}
public static function instance(): static {
if (self::$instance) {
return self::$instance;
}
return new static();
} }
/** /**
@ -56,6 +68,8 @@
$_ENV["mariadb"]["pass"], $_ENV["mariadb"]["pass"],
$_ENV["mariadb"]["db"], $_ENV["mariadb"]["db"],
); );
self::$instance = $this;
} }
/** /**

View file

@ -27,7 +27,7 @@
* @param string $table The target database table * @param string $table The target database table
*/ */
protected static function create(string $table, array $values): bool { protected static function create(string $table, array $values): bool {
return new Database()->from($table)->insert($values); return Database::instance()->from($table)->insert($values);
} }
/** /**
@ -42,7 +42,7 @@
public readonly array $columns, public readonly array $columns,
public readonly array $where public readonly array $where
) { ) {
$this->db = new Database(); $this->db = Database::instance();
} }
/** /**
@ -75,7 +75,7 @@
* @return bool Entity exists * @return bool Entity exists
*/ */
public function isset(): bool { public function isset(): bool {
return $this->_isset ??= new Database() return $this->_isset ??= Database::instance()
->from($this->table) ->from($this->table)
->where($this->where) ->where($this->where)
->limit(1) ->limit(1)