Hafey iniziò a giocare nella MLB con i St. Louis Cardinals nel 1924. Dal 1928 al 1930 mantenne una media di 27 fuoricampo e 114 RBI.[1] Nel luglio 1929 pareggiò il record della National League colpendo dieci valide in dieci turni in battuta consecutivi. Nel 1931 si aggiudicò il titolo di miglior battitore della lega e si classificò quinto nel premio di MVP della stagione.[2] Coi Cardinals, Hafey vinse due World Series, nel 1926 e nel 1931, venendo infine scambiato coi Cincinnati Reds dopo l'ennesima disputa salariale con la dirigenza. Con la nuova squadra, nel 1933 fu convocato per il primo All-Star Game della storia, dove fece registrare la prima battuta valida della storia dell'evento. Si ritirò dopo la stagione 1937. Nel gennaio 2014, i Cardinals annunciarono Hafey come uno dei 22 membri della classe inaugurale della Hall of Fame della squadra.[3]