getWithRelations($id); if (!$media) { return null; } $media['tracks'] = $this->getTracks($id); return $media; } public function getTracks(?int $mediaId): array { $stmt = $this->pdo->prepare(" SELECT * FROM tracks WHERE media_id = ? ORDER BY track_number "); $stmt->execute([$mediaId]); return $stmt->fetchAll(); } public function addTrack(?int $mediaId, array $trackData): int { $stmt = $this->pdo->prepare(" INSERT INTO tracks (media_id, track_number, title, artist) VALUES (?, ?, ?, ?) "); $stmt->execute([ $mediaId, $trackData['track_number'] ?? null, $trackData['title'] ?? null, //$trackData['duration'] ?? null, $trackData['artist'] ?? null ]); return (int)$this->pdo->lastInsertId(); } public function updateTrack(?int $trackId, array $trackData): bool { $fields = []; $params = []; foreach (['track_number', 'title', 'artist'] as $field) { if (array_key_exists($field, $trackData)) { $fields[] = "$field = ?"; $params[] = $trackData[$field]; } } if (!empty($fields)) { $params[] = $trackId; $stmt = $this->pdo->prepare("UPDATE tracks SET " . implode(', ', $fields) . " WHERE id = ?"); $stmt->execute($params); return true; } return false; } public function deleteTrack(?int $trackId): bool { $stmt = $this->pdo->prepare("DELETE FROM tracks WHERE id = ?"); $stmt->execute([$trackId]); return $stmt->rowCount() > 0; } public function createWithRelations(array $data): int { $mediaId = parent::createWithRelations($data); // Tracks speichern if (isset($data['tracks']) && is_array($data['tracks'])) { foreach ($data['tracks'] as $track) { $this->addTrack($mediaId, $track); } } return $mediaId; } public function updateWithRelations(int $id, array $data): bool { parent::updateWithRelations($id, $data); // Tracks aktualisieren if (isset($data['tracks']) && is_array($data['tracks'])) { // Alle existierenden Tracks löschen $this->pdo->prepare("DELETE FROM tracks WHERE media_id = ?")->execute([$id]); // Neue Tracks hinzufügen foreach ($data['tracks'] as $track) { $this->addTrack($id, $track); } } return true; } }