Examples:
$q->field('name');
Second argument specifies table for regular fields
$q->field('name','user');
$q->field('name','user')->field('line1','address');
Array as a first argument will specify mulitple fields, same as calling field() multiple times
$q->field(array('name','surname'));
Associative array will assume that "key" holds the alias. Value may be object.
$q->field(array('alias'=>'name','alias2'=>surname'));
$q->field(array('alias'=>$q->expr(..), 'alias2'=>$q->dsql()->.. ));
You may use array with aliases together with table specifier.
$q->field(array('alias'=>'name','alias2'=>surname'),'user');
You can specify $q->expr() for calculated fields. Alias is mandatory.
$q->field( $q->expr('2+2'),'alias'); // must always use alias
You can use $q->dsql() for subqueries. Alias is mandatory.
$q->field( $q->dsql()->table('x')... , 'alias'); // must always use alias