Just join the page_translations table twice:
Page:join('page_translations AS page_translations_en', function($join) {
$join->on('pages.id', '=', 'page_translations_en.page_id'),
$join->on('page_translations_en.locale', '=', 'en')
})->join('page_translations AS page_translations_he', function($join) {
$join->on('pages.id', '=', 'page_translations_he.page_id'),
$join->on('page_translations_he.locale', '=', 'he')
})
->select(array('pages.id AS page_id', 'page_translations_en.title as title_en', 'page_translations_he.title as
title_he','pages.in_menu', 'pages.created_at'))
->groupBy('page_translations.page_id');
Can't guarantee that will work out-of-the-box as I don't have a copy of your schema, but you get the idea.