pdo = $pdo; } protected function findById(int $id): array|false { $stmt = $this->pdo->prepare("SELECT * FROM {$this->table} WHERE id = ?"); $stmt->execute([$id]); return $stmt->fetch(); } protected function findAll(array $conditions = [], string $orderBy = 'createdAt DESC', ?int $limit = null, ?int $offset = null): array { $query = "SELECT * FROM {$this->table} WHERE 1=1"; $params = []; foreach ($conditions as $field => $value) { if (is_array($value)) { // LIKE Operator $query .= " AND $field LIKE ?"; $params[] = $value[0]; } else { $query .= " AND $field = ?"; $params[] = $value; } } $query .= " ORDER BY $orderBy"; if ($limit !== null) { $query .= " LIMIT " . (int)$limit; } if ($offset !== null) { $query .= " OFFSET " . (int)$offset; } $stmt = $this->pdo->prepare($query); $stmt->execute($params); return $stmt->fetchAll(); } protected function count(array $conditions = []): int|false { $query = "SELECT COUNT(*) FROM {$this->table} WHERE 1=1"; $params = []; foreach ($conditions as $field => $value) { if (is_array($value)) { $query .= " AND $field LIKE ?"; $params[] = $value[0]; } else { $query .= " AND $field = ?"; $params[] = $value; } } $stmt = $this->pdo->prepare($query); $stmt->execute($params); return $stmt->fetchColumn(); } protected function create(array $data): int|false { $fields = array_keys($data); $placeholders = array_fill(0, count($fields), '?'); $query = "INSERT INTO {$this->table} (" . implode(', ', $fields) . ") VALUES (" . implode(', ', $placeholders) . ")"; $stmt = $this->pdo->prepare($query); $stmt->execute(array_values($data)); return $this->pdo->lastInsertId(); } protected function update(int $id, array $data): bool { $fields = []; $params = []; foreach ($data as $field => $value) { $fields[] = "$field = ?"; $params[] = $value; } $params[] = $id; $query = "UPDATE {$this->table} SET " . implode(', ', $fields) . " WHERE id = ?"; $stmt = $this->pdo->prepare($query); $stmt->execute($params); return $stmt->rowCount() > 0; } protected function delete(int $id): bool { $stmt = $this->pdo->prepare("DELETE FROM {$this->table} WHERE id = ?"); $stmt->execute([$id]); return $stmt->rowCount() > 0; } }