Ho avuto questo problema. Penso che potrebbe essere perché la funzione viene ignorata all'interno della prima funzione di selezione e restituisce semplicemente tutto. Ho trovato un modo per farlo funzionare, prova qualcosa come il seguente:
Usa la classe Select insieme alla funzione selectWith del tablegateway:
use Zend\Db\Sql\Select as Select;
$select = new Select();
$select->from('table');
$select->columns(array('id','category_name'));
$resultSet = $this->tableGateway->selectWith($select);