db()->prepare("SELECT * FROM {$this->table} WHERE {$this->primaryKey} = ? AND deleted_at IS NULL LIMIT 1"); $stmt->execute([$id]); return $stmt->fetch() ?: null; } public function create(array $data): string|bool { $columns = implode(', ', array_keys($data)); $placeholders = implode(', ', array_fill(0, count($data), '?')); $sql = "INSERT INTO {$this->table} ({$columns}) VALUES ({$placeholders})"; $stmt = $this->db()->prepare($sql); if ($stmt->execute(array_values($data))) { return $data[$this->primaryKey] ?? $this->db()->lastInsertId(); } return false; } public function update(string $id, array $data): bool { $sets = []; foreach (array_keys($data) as $column) { $sets[] = "{$column} = ?"; } $setString = implode(', ', $sets); $sql = "UPDATE {$this->table} SET {$setString} WHERE {$this->primaryKey} = ?"; $stmt = $this->db()->prepare($sql); $params = array_values($data); $params[] = $id; return $stmt->execute($params); } public function delete(string $id): bool { $sql = "UPDATE {$this->table} SET deleted_at = NOW() WHERE {$this->primaryKey} = ?"; $stmt = $this->db()->prepare($sql); return $stmt->execute([$id]); } }