ST. LOUIS -- Jason Hammel had a lot to do with the early six-run cushion.
"Right out of the gate, took my first swings before I made my first pitch," Hammel said after working 7 1/3 stingy innings and contributing a two-run double to Chicago's big first.
Hammel has beaten the Cardinals twice this season, allowing two runs in 13 1/3 innings. This was his longest outing of the year, and manager Joe Maddon thought he could have thrown a complete game.
"It's important for us, it's important for him psychologically to be able to do that," Maddon said. "It's important that they know he can."
Michael Wacha (2-5) gave up a career-worst eight runs in four innings and has lost five consecutive decisions for the first time. The 24-year-old right-hander was a 17-game winner last season and the NL championship series MVP as a rookie in 2013, but this season has a 5.04 ERA.
"It's a pretty discouraging start," Wacha said. "I never really gave the team a chance."
Jorge Soler drew a bases-loaded walk in the first and hit a two-run home run in the fifth.
The six-run inning was a season-best for the NL Central leaders, who snapped their first three-game losing streak of the season. David Ross had an RBI double for his 500th career hit on a ball that somehow eluded center fielder Randal Grichuk's glove at the warning track, and Kris Bryant had an RBI single in the outburst.
Hammel (6-1) bounced back from his first loss in his previous start, allowing one run on four hits and retiring the side in order five times. The two-run double gave him a career-best five RBI on the year and his sixth hit in 23 at-bats.
"Nice, let's focus on that," Hammel said. "And I've got four months to go."
The outing was his longest since throwing 7 2/3 innings against the Dodgers on June 23, 2015. He's 6-1 for the second time in his career, also doing it in 2012.
"Honestly, I really wasn't that good tonight," Hammel said. "I got away with a lot of stuff."
Wacha had no losing streak longer than three games prior to this season. In his last three outings he has allowed 20 runs, 16 earned, in 12 innings with all three lasting four innings.
"When the season broke he was as good as anybody," manager Mike Matheny said. "He found a real good spot and we know what it looks like when he can get into a good rhythm."
Pinch hitters Tim Fedorowicz and Matt Szcur had an RBI apiece in a four-run ninth off Dean Kiekhefer.
Cardinals rookie SS Aledmys Diaz made an outstanding over-the-shoulder catch in shallow left, the start of a highly unusual 6-4-3 double play to end the second. Kris Bryant singled and had rounded second when Diaz snared Anthony Rizzo's flare. Diaz tossed to second baseman Kolten Wong, who flipped to first.
Cubs reliever Justin Grimm fielded a smash by Diaz between his legs in the eighth.
Cubs: Chicago has won Jake Arrieta's last 22 starts, a franchise record. He's 19-0 since his last loss on July 25, 2015 against the Phillies. Arrieta leads the majors with a 1.29 ERA and .153 opponents' batting average.
Cardinals: Carlos Martinez (4-4, 3.56) has lost four consecutive starts for the first time in his career. But he's 3-0 for his career against the Cubs.
Cubs: RF Jason Heyward (ribs) returned after missing three games and had two walks.
Cardinals: Jhonny Peralta (thumb) was 2 for 3 and scored a run in a rehab start for Class A Peoria.
J.R. Hildebrand, who'll start from the fifth row in the Indianapolis 500 on Sunday, was one of two celebrities throwing first pitches. David Eckstein, the World Series MVP in 2006, also got the honor.
Trout reaches 1,000 runs, Angels beat A's 5-3 to stop skid
— Mike Trout scored his 1,000th run in the majors, Michael Lorenzen threw six innings of three-hit ball for his fifth win and the Los Angeles Angels snapped a four-game losing streak Saturday night with a 5-3 victory over the Oakland Athletics.
Andrew Velazquez extends Angels' lead with 2-run jack
Andrew Velazquez gets a hold of this ball to put Los Angeles up 5-0 over the Athletics.
Serven's 2 HRs lift Rockies over Mets 11-3 for DH split
— Brian Serven launched a pair of two-run homers — his first two major league hits — to lead the Colorado Rockies over the New York Mets 11-3 on Saturday night for a doubleheader split.
Brian Serven unloads his 2nd homer to extend the Rockies' lead
Brian Serven is unstoppable as he crushes his second home run of the game to give the Rockies an 8-3 lead in the bottom of the sixth inning.
McCutchen, Urías homer, Woodruff goes 6 in Brewers' 5-1 win
— Andrew McCutchen hit a leadoff home run, Luis Urías added a solo shot and a defensive gem, and Brandon Woodruff allowed one run in six effective innings to give the Milwaukee Brewers a 5-1 win over the Washington Nationals on Saturday night.
McCutchen homers on the first pitch of the bottom of the first
Andrew McCutchen gives the Brewers a quick 1-0 lead as he hits a home run on the first pitch of the bottom of the first inning.