my (not nec. standard) style for that is to just assign it to something if it's a multiline block. For me once it gets complicated enough to be multiline it helps me understand it if I give it a name anyway.

Though now that I look at it the code confuses me anyway... why do you have id in the cache key and then have to use id as an index again on what is returned by the cache?