KANSAS CITY, Mo. -- Danny Duffy pitched as deep into a game than he ever has.
Duffy's outing matched the longest of his career. He gave up two runs in the first inning and nothing after that.
He allowed six hits, struck out eight and walked none.
"I think no walks is more of a win for me than anything, outside of the team winning," Duffy said.
Duffy (3-1), who walked four in his previous start and lasted just 4 2/3 innings in a no-decision against the New York Mets, lowered his ERA to 3.24. He threw 68 strikes in 101 pitches before Joakim Soria replaced him in the ninth.
"It's nice to go eight innings," Duffy said. "Any time you can save the bullpen it's a good thing, very gratifying."
Morales, who was hitting .191 on June 5 after a 1-for-15 series against the Cleveland Indians, went 4-for-4, raising his average to .243. In his past 16 games, Morales is 24-for-57 (.421) with 15 RBIs, four doubles, four home runs and 11 runs.
"I felt in the beginning of the year, I had a lot of hard contact right at everyone," Morales said with catching coach Pedro Grifol acting as his interpreter. "But it is a long season. It is very difficult to go through a whole season with that type of (poor) luck."
Cardinals shortstop Aledmys Diaz, who had two doubles against Duffy, left in the ninth after fouling a pitch in the dirt that ricocheted and struck him in the face. After Diaz was treated by the trainer and led off the field, Greg Garcia finished the at-bat and grounded out.
"It's never happened to me," Diaz said through an interpreter. "It was actually a real scary moment, a lot of things went through my mind. Thank God, it wasn't worse. We are going to the hospital to do some more routine exams just to make sure everything is OK. I hope it's just a scare. Obviously, when the inflammation goes down, I hope to be able to keep helping the team."
Matt Holliday, who entered the game a career .475 hitter at Kauffman Stadium, homered with Diaz, who had doubled, aboard in the first inning. Holliday's club-leading 15th home run on a 1-1 Duffy pitch barely cleared the center-field fence and went just beyond the glove of a leaping Lorenzo Cain.
"I didn't really feel a need to settle down after that," Duffy said. "I thought I made a good pitch. He's just so strong."
It was the 47th home run surrendered by Royals pitchers this month, which is a franchise record for June. Kansas City pitchers have given up a home run in 15 consecutive games.
The Royals tied it in the bottom of the inning with two unearned runs after second baseman Matt Carpenter failed to cleanly pick up Salvador Perez's slow grounder to load the bases with two outs. Morales, who homered twice Sunday, singled to right, scoring Cain and Eric Hosmer.
"He (Wainwright) comes out and gets two quick strikeouts and then little things start happening," Cardinals manager Mike Matheny said. "Couple of hard-hit balls, but a lot of them were ground balls that found the right spots. They got big hits when they needed them. The first inning it would have been nice to get out of that especially with the one Perez hit. If we make that play and then get us out of there with a zero, it might have been a little different."
The Royals batted around in a four-run second against Cardinals right-hander Adam Wainwright, who finished the inning with 69 pitches.
The inning featured a Hosmer two-run high chopper over the head of first baseman Jedd Gyorko for a double, scoring Cain and Whit Merrifield. Cain singled home Alcides Escobar with the first run of the inning and Salvador Perez's single brought home Hosmer.
"The frustrating part is all six runs they scored was with two outs," Wainwright said. "A pitcher's job is to limit those innings, obviously, to put zeroes up. If I just make a different pitch, three or four of those times, we're talking about zeroes instead of big crooked numbers. It's pretty frustrating and I had decent stuff today, too."
Wainwright was removed after five innings and 102 pitches, allowing six runs (four earned), nine hits and one walk while striking out seven, including Alex Gordon three times.
NOTES: Cardinals C Brayan Pena is expected to come off the disabled list Tuesday after hitting .192 in 14 minor league rehab games. Pena, who has not played this season after undergoing left knee surgery, joined the club on Monday but was not activated. ... Royals C Salvador Perez went 1-for-9 in the three-game series with Houston and is in a 2-for-17 slide. ... Cardinals 1B Matt Adams, who had not played since Wednesday because of lower back tightness, was not in the lineup for the fourth straight game. ... Royals RHP Yordano Ventura, who has not pitched since June 17, completed his eight-game suspension and will start Tuesday against the Cardinals. St. Louis will send RHP Michael Wacha to the mound.