No deberías estar usando superglobales PHP directamente en CakePHP. En su lugar, debe usar la denominación Model.field
para no obtener errores de campo ambiguos.
Los campos virtuales son el camino a seguir, pero ese no es su problema, necesita leer el libro un poco más.
$total = $this->RequestedItem->find('all', array(array('fields' => array('sum(Model.cost * Model.quantity) AS ctotal'), 'conditions'=>array('RequestedItem.purchase_request_id'=>$this->params['named']['po_id'])));
debería funcionar bien, con los virtualFields sería
var $virtualFields = array('total' => 'SUM(Model.cost * Model.quantity)');
$total = $this->RequestedItem->find('all', array(array('fields' => array('total'), 'conditions'=>array('RequestedItem.purchase_request_id'=>$this->params['named']['po_id'])));
Los campos que van en la tecla 'campos', al igual que las condiciones van en la tecla 'condiciones'. Ver http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find
Probablemente quiera evitar poner $ _GET ['po_id'] en una consulta directamente, incluso si CakePHP está borrando la entrada del usuario por usted. – Dave
@Dave si CakePHP ya maneja la inyección, ¿cuál es el daño? –