Marlins hold off Cardinals 8-7