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

Como obtener atributos originales y los atributos actualizados

Estas en el tema de Como obtener atributos originales y los atributos actualizados en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos tengo un formulario para realizar un update como mediante Eloquent puedo obtener los atributos originales y los atributos nuevos o obtener cuales atributos ...
  #1 (permalink)  
Antiguo 31/08/2017, 16:16
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 6 meses
Puntos: 6
Como obtener atributos originales y los atributos actualizados

Hola amigos tengo un formulario para realizar un update como mediante Eloquent puedo obtener los atributos originales y los atributos nuevos o obtener cuales atributos fueron actualizados

o que me recomiendan?
  #2 (permalink)  
Antiguo 31/08/2017, 17:55
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Como obtener atributos originales y los atributos actualizados

pudes hacer uso de isDirty o getDirty
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 04/09/2017, 15:21
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 6 meses
Puntos: 6
Respuesta: Como obtener atributos originales y los atributos actualizados

hhs tenias razón use getDirty()
  #4 (permalink)  
Antiguo 07/09/2017, 16:17
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 6 meses
Puntos: 6
Respuesta: Como obtener atributos originales y los atributos actualizados

hhs tengo una pregunta desde el modelo puedo obtener personalizar el nombre de los atributos para mostararlos en una vista?

Código PHP:
Ver original
  1. Estacion::saving(function(Estacion $estacion){
  2. $dirty = $estacion->getDirty();
  3.         foreach ($dirty as $field => $newdata)
  4.         {
  5.           $olddata = $estacion->getOriginal($field);
  6.           if ($olddata != $newdata)
  7.           {
  8.             if($estacion->id){
  9.                 $historial = new Historial();
  10.                 $historial->viejo =$field.'='.$olddata;
  11.                 $historial->nuevo =$field.'='.$newdata;
  12.                 $historial->estacion_id=$estacion->id;
  13.                 $historial->autor_id = Auth::user()->id;
  14.                 $historial->save();            
  15.             }
  16.  
  17.           }
  18.         }
  19.  
  20.      });
  21. no hay más uno
  #5 (permalink)  
Antiguo 08/09/2017, 06:20
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Como obtener atributos originales y los atributos actualizados

Desde el modelo no, pero siempre puedes crear un nuevo arreglo para eso y mostrarlo en la vista
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #6 (permalink)  
Antiguo 13/09/2017, 20:54
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 6 meses
Puntos: 6
Respuesta: Como obtener atributos originales y los atributos actualizados

hhs podrias darme un ejemplo de como usar el array en la vista.

una pregunta: deberia en un campo guardar el nombre del campo y en otros dos campos el valor antiguo y el valor nuevo o k me recomiendas?
  #7 (permalink)  
Antiguo 13/09/2017, 21:43
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 1 mes
Puntos: 1146
Respuesta: Como obtener atributos originales y los atributos actualizados

has probado con definir un Accessor?

checa la documentación
https://laravel.com/docs/5.4/eloquent-mutators

también puedes agregar campos desde el modelo que no existan en la base de datos

Código PHP:
Ver original
  1. protected $appends = ['is_admin'];

y le das un valor con

Código PHP:
Ver original
  1. public function getIsAdminAttribute()
  2. {
  3.     return $this->attributes['admin'] == 'yes';
  4. }
  #8 (permalink)  
Antiguo 14/09/2017, 08:01
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Como obtener atributos originales y los atributos actualizados

Veo que quieres tener un historial, pero desde mi punto de vista es mas sencillo que uses un model event que escriba en el historial cuando creas o actualizas las estaciones de esa forma no tienes que preocuparte de buscar los cambios en el modelo estaciones.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #9 (permalink)  
Antiguo 14/09/2017, 11:09
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 6 meses
Puntos: 6
Respuesta: Como obtener atributos originales y los atributos actualizados

hhs en el modelo estaciones tengo

Código PHP:
Ver original
  1. //Crear
  2. Estacion::created(function(Estacion $estacion) {
  3.  
  4. });
  5.  
  6. //Actualiza
  7. Estacion::saving(function(Estacion $estacion){
  8. $dirty = $estacion->getDirty();
  9.         foreach ($dirty as $field => $newdata)
  10.         {
  11.           $olddata = $estacion->getOriginal($field);
  12.           if ($olddata != $newdata)
  13.           {
  14.             if($estacion->id){
  15.                 $historial = new Historial();
  16.                 $historial->viejo =$field.'='.$olddata;
  17.                 $historial->nuevo =$field.'='.$newdata;
  18.                 $historial->estacion_id=$estacion->id;
  19.                 $historial->autor_id = Auth::user()->id;
  20.                 $historial->save();            
  21.             }
  22.  
  23.           }
  24.         }
  25.  
  26.      });


El requerimiento que tengo es mostrar los cambios que se han presentado en cada una de las estaciones para este fin tengo la tabla historial_estaciones y la mapeo con el modelo Historial
Código SQL:
Ver original
  1. CREATE TABLE historial_estaciones
  2. (
  3.   id serial NOT NULL,
  4.   viejo text,
  5.   nuevo text,
  6.   estacion_id INTEGER,
  7.   autor_id INTEGER,
  8.   created_at TIMESTAMP WITHOUT TIME zone NOT NULL,
  9.   updated_at TIMESTAMP WITHOUT TIME zone NOT NULL,
  10.   CONSTRAINT historial_estaciones_pkey PRIMARY KEY (id)
  11. )
  12. WITH (
  13.   OIDS=FALSE
  14. );
  15. ALTER TABLE historial_estaciones
  16.   OWNER TO postgres;

en la vista muestro así:
Código HTML:
Ver original
  1. Nuevo                         Antiguo
  2. nombre=prueba1  nombre=prueba2
  3. latitud_wgs84=4.31  latitud_wgs84=4.3


en la vista necesito mostrar la informacion así

Nuevo Antiguo
Nombre=prueba1 Nombre=prueba2
Latitud=4.31 Latitud=4.3




también tendría otro historial que para todo el sistema y los diferentes modelos donde indique cuando crea o actualizo.

Última edición por Montes28; 14/09/2017 a las 11:16

Etiquetas: laravel
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 12:09.