You can try something like this:
val contacts: Iterable[Contact] = SQL(
"""
SELECT c.id, p.area, p.rest
FROM PhoneNumber p
JOIN Contact c on p.contact_id = c.id;
"""
).as(long("id") ~ str("area") ~ str("rest") map(flatten) *
).groupBy(_._1).map {
case (k,l) => Contact(k, l.map {
d => PhoneNumber(d._2, d._3)
})
}