getWithRelations($id); if (!$media) { return null; } $media['tracks'] = $this->getTracks($id); return $media; } public function getTracks($mediaId) { $stmt = $this->pdo->prepare(" SELECT * FROM tracks WHERE media_id = ? ORDER BY track_number "); $stmt->execute([$mediaId]); return $stmt->fetchAll(); } public function addTrack($mediaId, $trackData) { $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 $this->pdo->lastInsertId(); } public function updateTrack($trackId, $trackData) { $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($trackId) { $stmt = $this->pdo->prepare("DELETE FROM tracks WHERE id = ?"); $stmt->execute([$trackId]); return $stmt->rowCount() > 0; } public function createWithRelations($data) { $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($id, $data) { 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; } }