Put all your boolean conditions in a nested where clause and add the first where clause that will act as an AND, like:
$searchResult=DB::table('books')->join('apartments', 'apartment_id', '=', 'apartments.id')
->where('col1','=','foobar')
->where(function($queryContainer){
$queryContainer->where(function($query){
$query->where('date_ini', '<=', Input::get( 'desdeGet' ))
->where('date_fin','>', Input::get( 'desdeGet' ));
})
->orwhere(function($query){
$query ->where('date_ini', '<', Input::get( 'hastaGet' ))
->where('date_fin', '>=', Input::get( 'hastaGet' ));
})
->orwhere(function($query){
$query->where('date_ini', '>=', Input::get( 'desdeGet' ))
->where('date_fin', '<=', Input::get( 'hastaGet' ));
});
})
->paginate(2);