Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

CodeIgniter Pasar funcion a resultados de un modelo

Estas en el tema de Pasar funcion a resultados de un modelo en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Tengo que pasar una función a los resultados de un modelo. cuando es un solo resultado no hay problema Código PHP: $datos  =  $this -> ...
  #1 (permalink)  
Antiguo 01/05/2011, 23:11
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 9 meses
Puntos: 641
Pasar funcion a resultados de un modelo

Tengo que pasar una función a los resultados de un modelo.

cuando es un solo resultado no hay problema

Código PHP:
$datos $this->modelo_model->funcion-model($nombre);
$data = array
(
     
'fecha' => $this->funcion($datos->resultado),
); 
pero cuando ($datos->resultado) se trata de varios resultados o sea un array, en la vista me aparece que no es un objeto y me da error

entonces no se como se hace para pasar una función a los resultados. y peor cuando quiero pasar la función a algo así:

Código PHP:
$data = array(
    
'filas' => $this->modelo_model->funcion_modelo($nombre),
); 
esto envia los resultados a la vista y pues no se como podría pasarle la función a una parte de eso.

Digamos que seleccione los usuarios que tengan 20 años y que un campo fecha me dice la fecha de inscripción, la query me devuelve los días que lleva de inscrito pero la función los tranforma en meses y años.

entonces mi intención es que le pase la función a ese campo y al ponerlo en la vista me devuelva el return de la función.

gracias :)
  #2 (permalink)  
Antiguo 02/05/2011, 11:04
 
Fecha de Ingreso: marzo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 24
Respuesta: Pasar funcion a resultados de un modelo

Hola memoadian =)

Pasar la funcion o pasar los datos? no entendi bien =/

Mira, poniendo un ejemplo de un metodo de un modelo que trae varias filas de la db:
Código PHP:
Ver original
  1. public function getDatos()
  2. {
  3.     $query = $this->db->get('datos');
  4.     return $query->result();
  5. }
Asi se usaria en el controlador:
Código PHP:
Ver original
  1. $datos = $this->modelo->getDatos();
  2. echo $datos[0]->dato1; //dato1 de la primera fila de la consulta
  3. //o sino por un foreach
  4. foreach($datos as $dato) {
  5.     echo $dato->dato1;
  6. }

En cambio si tenes una funcion que trae un solo dato:
Código PHP:
Ver original
  1. public function getDato()
  2. {
  3.     $query = $this->db->get('datos');
  4.     return $query->row(); //row() devuelve la primer fila
  5. }
Y se usa asi:
Código PHP:
Ver original
  1. $dato = $this->modelo->getDato();
  2. echo $dato->dato1;

Espero que te sirva, Saludos

Última edición por RatoN7; 02/05/2011 a las 11:06 Razón: ...
  #3 (permalink)  
Antiguo 04/05/2011, 09:02
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 9 meses
Puntos: 641
Respuesta: Pasar funcion a resultados de un modelo

si bueno, a lo mejor no fui claro, digamos que ya se hacer eso que dices, traer los datos al controlador y eso...

pero quiero que el resultado de los datos, en este caso hay uno que me devuelve el numero de minutos que lleva publicado un artículo, pero pues no quiero poner en la vista "publicado hace 456879 minutos" entonces le quiero pasar una función que dependiendo del valor de los minutos me lo transforme a horas dias y meses, algo así

controlador

Código PHP:
Ver original
  1. function ver($nombre = '', $numero = '', $id = '')
  2.     {
  3.         $datos = $this->modelo_model->detalle($nombre,$numero,$id);
  4.             'fecha' => $this->fechaesp($datos->fecha),
  5.         );
  6.         $this->load->view('includes/template', $data);
  7.     }

donde fechaesp es una función que le paso a los datos de la consulta, y en este caso se puede por que es un asolo resultado y se obtiene sin tener que recorrer un array, pero en el otro caso de los minutos es un array y me devuelve un error de que no es un objeto cuando le paso la función.

gracias :D
  #4 (permalink)  
Antiguo 04/05/2011, 10:13
 
Fecha de Ingreso: marzo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 24
Respuesta: Pasar funcion a resultados de un modelo

Ahh.. ya entendi.

El error viene por la manera en que el modelo arma los resultados de la consulta.
Cuando usas en el modelo el $query->row(), te devuelve un objeto en donde podes acceder a los campos del registro como si fueran propiedades de un objeto, algo asi:
Código PHP:
Ver original
  1. $resultado = $query->row();
  2.  
  3. //Unica fila
  4. $resultado->campo1;
  5. $resultado->campo2;

En cambio, cuando usas el $query->result(), te devuelve un array en donde cada elemento es un objeto como los que genera row(), algo asi:
Código PHP:
Ver original
  1. //Acceder a la primer fila
  2. $resultado[0]->campo1;
  3. $resultado[0]->campo2;
  4. //Segunda fila
  5. $resultado[1]->campo1;
  6. $resultado[1]->campo2;
  7. //Esta variable no existe
  8. $resultado->campo1;

Entonces, para convertir las fechas a partir de un result() podes usar un foreach:
Código PHP:
Ver original
  1. foreach($resultado as $key => $val) {
  2.     $resultado[$key]->fecha = $this->fechaesp($val->fecha);
  3. }
En caso de que en la funcion del modelo no sepas si viene un row() o result() en el controlador podes usar la funcion de php is_array() para diferenciarlos.

Espero que te sirva, saludos

Edito para agregar algo..
Siempre que te mande error de objeto no encontrado usa var_dump($nombre_variable) asi ves como es la estructra de la variable que estas usando. Ahora si, bye.

Última edición por RatoN7; 04/05/2011 a las 10:18
  #5 (permalink)  
Antiguo 06/05/2011, 08:51
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 9 meses
Puntos: 641
Respuesta: Pasar funcion a resultados de un modelo

gracias. no he podido, pero me encontrado unos tutoriales de CI para sacarle el máximo provecho XD a estudiar se ha dicho.
  #6 (permalink)  
Antiguo 01/10/2015, 16:04
 
Fecha de Ingreso: julio-2008
Mensajes: 19
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Pasar funcion a resultados de un modelo

Buenas tardes yo me encuentro con un problema similar, digamos que lo que quiero es recoger datos o mas bien enviar datos de un formulario al controlador despues al modelo para su modificación.

El detalle es que el formulario es producido por un ciclo es decir son muchos datos

Código PHP:
Ver original
  1. if ($partida != FALSE){    
  2.                                         foreach ($partida->result() as $row) {
  3.                                             echo "<tr>";
  4.                                                 echo " <input type='hidden' name='".$row->FOLIO_PARTIDA."'>";
  5.                                                 echo "<td align='center'>".$i++."</td>";
  6.                                                 echo "<td> ".$row->CANTIDAD."</td>";                                                
  7.                                                 echo "<td>".$row->NOMBRE_ARTI."</td>";
  8.                                                    echo "<td>".$row->UNIDAD_M."</td>";
  9.                                                    echo "<td>".$row->DESCRIPCION."</td>";
  10.                                      
  11.                                                 echo "<td align='center'>";
  12.                                             //   echo ' <a href="" class="btn btn-default btn-xs black"><i class="fa fa-trash-o"></i> Borrar</a>';
  13.                                                echo    "$<input type='number' step='0.01' name='costo".$row->FOLIO_PARTIDA."'>
  14.  
  15.  
  16.                                             </td>";
  17.                                             echo "</tr>";
  18.                                         }
  19.                                     } ?>
  20.  
  21.  
  22. normalmente se recogen asi:
  23.  
  24. $data = array(
  25.                 'partida' => $this->input->post('partida', TRUE),
  26.        
  27.                 'costo' => $this->input->post('costo', TRUE));

lo que no se es como sería si fueran arreglos.

a ver si me explique bien...

Etiquetas: funcion, modelo, pasar, resultados
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:05.