how do you alter queries for node/# to select entity-referenced node titles instead of just target_id? I am using Drupal 7 Services and the generic call of services/node/#. Unfortunately that only gives me the target_id as a property of every field with type entity reference; and my interface does need the node title at the least.

I have...

function  HOOK_query_alter(QueryAlterableInterface $query) {
    if ($query-&gt;hasTag('NODE RETRIEVE')) { // WHAT TAG SHOULD I USE?
        // ..TO ONLY ALTER (service)/NODE/# QUERIES?
    }        
    $fields =&amp; $query-&gt;getFields();
    ... // AND HOW DO I ALTER TO GET REFERENCED FIELD NODE TITLES?
}


All said, I do realize I might be able to use node_load and loop over the results to run subsequent queries for this data, but that seems kind of expensive, unless the resulting hook_alter_query would be too complicated. Please say so if you feel that's most likely the case.
I believe @Clive was going in this direction here, but I wasn't clear that the Services does in fact invoke Hook_node_load($nodes, $types) when using the retrieve methods at services/node/#. I suppose I was avoiding the node_load_multiple because they are so heavy for only the few fields I want. Code is below

function HOOK_node_load($nodes, $types){
    if (in_array('yournodetype', $types)) {
        foreach($nodes as &amp;$node) {
            $f = field_get_items('node', $node, 'field_your_reference_field');
            if (!empty($f) &amp;&amp; isset($f[0]['target_id'])) {
                $refNode = _mymodule_reference_load($f[0]['target_id']); // this function simply writes a manual SQL query for my title and iata values.
                $node-&gt;field_your_reference_field[LANGUAGE_NONE][0]['title'] = $refNode-&gt;title;
                $node-&gt;field_your_reference_field[LANGUAGE_NONE][0]['iata'] = $refNode-&gt;field_iata[LANGUAGE_NONE][0]['value'];
            }
        }
    }
}

function _mymodule_reference_load($nid){
    $refNode = db_query(sprintf("SELECT N.nid, N.type, N.title, A.field_iata_value, R1.field_readmore1_value, R2.field_readmore2_value
                FROM node N
                LEFT JOIN field_data_field_iata A ON N.nid = A.entity_id 
                LEFT JOIN field_data_field_readmore1 R1 ON N.nid = R1.entity_id 
                LEFT JOIN field_data_field_readmore2 R2 ON N.nid = R2.entity_id 
                AND A.deleted =  '0'
                AND R1.deleted =  '0'
                AND R2.deleted =  '0'
                WHERE N.nid =  '%s'", $nid))-&gt;fetchObject();
    $refNode-&gt;field_iata = array('und' =&gt; array(0 =&gt; array('value' =&gt; $refNode-&gt;field_iata_value))); // maintain same structure as node_load
    $refNode-&gt;field_readmore1 = array('und' =&gt; array(0 =&gt; array('value' =&gt; $refNode-&gt;field_readmore1_value)));
    $refNode-&gt;field_readmore2 = array('und' =&gt; array(0 =&gt; array('value' =&gt; $refNode-&gt;field_readmore2_value)));
    unset($refNode-&gt;field_iata_value);
    unset($refNode-&gt;field_readmore1_value);
    unset($refNode-&gt;field_readmore2_value);
    return $refNode;
}