Samardzija (4-1) gave up a solo homer to Jason Heyward in the second inning, walked two and struck out seven in a 105-pitch outing to help the Cubs win for the third time in four games.
LaHair drove Tommy Hanson’s first pitch of the fourth high over the right field wall for his eighth homer of the season. One pitch later, Stewart connected on his third homer of the year – also to right – to make it 2-1.
Soto hit a two-run homer off Chad Durbin in the eighth.
Atlanta threatened with one out in the seventh when Samardzija hit Heyward with a pitch and Tyler Pastornicky singled, but pinch-hitter Eric Hinske lined to LaHair at first, who threw to second to double off Heyward and squash the rally.
Hanson (3-3) gave up five hits and two runs in six innings. The loss was just the eighth in the past 26 games for the Braves, who came in having won three in a row.
When Braves reliever Eric O’Flaherty hit David DeJesus with a two-out pitch in the bottom of the seventh, home plate umpire Chris Conroy warned both benches, and Braves manager Fredi Gonzalez came out of the dugout. He was ejected by Conroy moments later.
Tony Campana then beat out a bunt and Starlin Castro hit an RBI single to make it 3-1.
Demoted Chicago closer Carlos Marmol came in to pitch the eighth and walked the first two batters.
Freddie Freeman lined out before a stolen base and a wild pitch by Marmol put runners at second and third. Brian McCann took a third strike for the second out, and Marmol turned the boos into cheers by striking out Dan Uggla swinging.