El problema es que precisamente estás iterando todos los datos, pero la inserción la haces hasta el final de dichos loops.
Obviamente sólo obtendrás el último valor.
Lo correcto sería que insertes dentro de un loop ¿no te parece lógico?
Código PHP:
Ver originalforeach ($foo as $bar) {
$x = $x_obj->prop;
$y = $y_obj->prop;
$z = $z_obj->prop;
$sql = "INSERT INTO table(x,y,z) VALUES(...)";
}