In a foreach loop, the "as' portion is actually a temporary variable built for that instance, assigned to the value from the subject array. Therefore, modifying $qr won't do anything, as it's not part of the array. Does that make sense?
foreach($query_results as $k=>$qr)
$query_results[$k]->brand_new_field = retrieve_other_data($qr->first_field, $qr->second_field);
Also this is off topic, but if you are doing queries within that loop, you are doing it terribly wrong. But that's for another thread.