Ayuda, operaciones en tablas

87 views
Skip to first unread message

Paz Ojeda

unread,
May 4, 2016, 4:52:09 PM5/4/16
to CakePHP en Español
Hola lo que pasa esque deseo restar dos campos de mi tabla y almacenarlo en otra tabla de la misma,la tabla se llama produccions y los campos que quiero restar son horai y hora f
Todos estos datos previamente son almacenados por medio de un formulario

public function add(){

$horai=$this->Produccion->find('all', array('fields'=>array(Produccion.horai)));
Lo mismo para horaf
$resul= $horaf-$horai;

$this->Produccion->updateall(arrray('Produccion.horast', $resul));

horast es donde quiero guardar el resultado.

El error basicamente es que no soporta la operacion
Muchas gracias, saludos

Linkce

unread,
Sep 20, 2016, 8:00:52 AM9/20/16
to CakePHP en Español
Es importante saber si trabajas con CakePHP 1.3, 2.x ó 3.x

Sea cual sea, lo primero es que en Produccion->find('all') se devuelve un array, por eso es muy posible que la instrucción $result = $horaf - $horai arroje el mensaje de operación no soportada (estás restando arrays).

Haz debug sobre $horaf y sobre $horai para ver cómo está estructurado el contenido de esas variables y así saber cómo restar las horas (que si están en formato TIME no se pueden restar así de fácil)

Además, el Produccion->updateAll está mal expresado: primero porque  la palabra array está mal escrita, segundo porque el array está mal construido y tercero porque a la llamada a updateall le falta un parámetro (que aunque es opcional, creo que en tu caso es obligatorio).

La explicación de tu problema tampoco está bien redactado porque no me aclara ni lo que quieres hacer ni la estructura de tu bdd.

Si 'horast' está en la misma tabla que 'horai' y 'horaf', y quieres calcularlo para todas las entradas, es tan fácil como:
$this->Produccion->updateAll(array('Produccion.horast' => 'Produccion.horaf - Produccion.horai'));

Si está en tablas diferentes, el script sería (para Cakphp 1.3):
$producciones = $this->Produccion->find('all', array('fields' => array('Produccion.id', 'Produccion.horai', 'Produccion.horaf'), 'recursive' => -1);
$this->loadModel('OtraTabla');
foreach ($produccion as $produccion) {
    $this->OtraTabla->updateAll(array('Produccion.horast' => $produccion['Produccion'][´horaf'] - $produccion['Produccion'][´horai']), array('Produccion.id' => $produccion['Produccion'][´id']));
Reply all
Reply to author
Forward
0 new messages